OC 特有語法1

2021-06-22 22:50:42 字數 2473 閱讀 3628

---------------------------asp.net+unity開發、.net培訓、期待與您交流!----------------------------

一、利用點語法替換set方法和get方法

1.方法呼叫 

student *stu = [student new];

[stu setage:10];

int age = [stu age];

這是set和get的物件呼叫方法

2、點語法

stu.age = 10;

int age = stu.age;

這就是點語法,點語法的實質還是方法呼叫

當使用點語法時,編譯器會自動展開成相應的方法 ,即:

stu.age = 10;

相當於[stu setage :10];

3、常見錯誤

- (void) setage:(int)age

- (int) age  

以上**會發生死迴圈;

二,作用域

區域性變數、全域性變數都有自己的作用域,成員變數也不例外

@private:只能在當前類的物件方法中直接訪問

@protected:可以在當前類以及子類的物件方法中直接訪問

@public:任何地方都可以直接訪問

@package:同乙個「體系內」(框架)可以訪問,介於@private和@public之間

三、@property

用在@inteface中

用來自動生成setter和getter的宣告

用@property int age;就可以代替下面的兩行

- (int)age;                  //getter

-  (void)setage:(int)newage;  //setter

@inte***ce person :nsobject

- (int)age;  

-  (void)setage:(int)newage; 

@property int age;

@end;

四、@synthesize

用在@implementation中

用來自動生成setter和getter的實現

用@synthesize age = _age;就可以代替 

-(int)age

-(void)newage :(int)age

注意:@synthesize age = _age;

setter和getter實現中會訪問成員變數_age 

如果成員變數_age不存在,就會自動生成乙個@private的成員變數_age

@synthesize age;

setter和getter實現中會訪問成員變數age 

如果成員變數age不存在,就會自動生成乙個@private的成員變數age

手動實現

若手動實現了setter方法,編譯器就只會自動生成getter方法

若手動實現了getter方法,編譯器就只會自動生成setter方法

若同時手動實現了setter和getter方法,編譯器就不會自動生成不存在的成員變數 

自從xcode 4.x後,@property就獨攬了@synthesize的功能。也就是說,@property可以同時生成setter和getter的宣告和實現

五、id

萬能指標,能指向任何oc物件,相當於nsobject *

id型別的定義

typedef struct objc_object *id; 

id p = [person new]; //注意id後不加*號;

六、物件的建立原理

1.new的兩部曲:

1)分配記憶體(+alloc)

2)初始化(-init)

person *p1 = [person alloc];

person *p1 = [p1 init];

合成一句後:

person *p = [[person alloc] init];

2,init方法的重寫

在物件建立完畢後,成員變數馬上就有一些預設的值

- (id)init

return self;} 

3、自定義的構造方法

構造方法的一些規範:

返回值是id型別

方法名都以init開頭

- (id)initwithage:(int)age

return self;}

七、多檔案程式設計

每個類分布在不同檔案中

類的宣告放在.h檔案,類的實現放在.m檔案

若想使用某個類,就包含某個類的.h宣告檔案

---------------------------

asp.net+unity開發、.net培訓、期待與您交流!

----------------------------

oc基礎語法 oc特有語法(1)

1 根據以前學的,呼叫方法是這樣的 student stu student new stu setage 100 int age stu age 如果用點語法,這樣就可以呼叫了 stu.age 100 int age stu.age 2 點語法的本質 其實點語法的本質還是方法呼叫,當使用點語法時,編...

OC特有語法 多型

多型 指標以父類型別宣告,但實際執行時指向的是其某個子類的物件,當用這個指標呼叫方法時,會根據其指向的不同子類物件呼叫不同的物件方法。這種現象叫多型。多型的前提是子類會覆蓋父類的方法。多型的應用 需要乙個新的函式專門用來餵狗 void feed dog d 如果這個時候也需要喂貓,那就應該重寫新乙個...

OC特有語法 SEL

sel就是對方法的一種包裝。包裝的sel型別資料它對應相應的方法位址,找到方法位址就可以呼叫方法。在記憶體中每個類的方法都儲存在類物件中,每個方法都有乙個與之對應的sel型別的資料,根據乙個sel資料就可以找到對應的方法位址,進而呼叫方法。inte ce person nsobject void t...