oc基礎知識:屬性、協議和分類

20131127日日誌:

1.屬性:

@propertyassign copyretain內存管理的信息)類型  實例變量名

@synthesize  實例變量名

屬性方法實現了實例變量的getset方法,等同於:

-(void)set實例變量名:(參數類型)參數名{

實例變量名 參數名;                      

}和

(返回值類型)實例變量名{

return  實例變量名;

}

需要注意的是屬性方法不能實現那些需要接受額外參數的方法,例如car對象中輪胎的狀況:

-(void)setTire:(Tire*)tire

            atIndex:(int)index;

-(Tire*)tireAtIndex:(int)index;

從而說明特性不是萬能的,它只支持替代-setBlah-blah方法。屬性可以減少我們所寫代碼的數量。使用屬性方法後就可以使用點語法了,點語法只是調用實例的setget方法的一種快捷方式。

dealie.blah=greeble;等同於[dealie setBlah:greeble];

shronk = dealie.greeble;等同於shronk = [dealie  greeble];


2.協議:

            聲明協議:

@protocol  協議名稱

@optional

方法聲明列表

@required

方法聲明列表

@ end

協議的所有使用者都要實現協議中的方法,其中@optional可選擇實現,@required聲明協議中必須實現的方法,如果不加聲明的情況下默認爲@required,即方法必須實現。要注意的是協議的使用不引入新的實例變量。

協議也具有動態綁定特性,比如下面的實例對象被確定爲gun,就擁有了gun所擁有的所有屬性:

Arm *arm = [[Arm alloc]init];//動態綁定的實現

        arm.name = @"wuqi";

         NSLog(@"%@的編號爲 %d\n",arm.name,arm.number);

        //wuqi的編號爲 4

        arm = gun;

         NSLog(@"%@的編號爲 %d\n",arm.name,arm.number);

        //ak47的編號爲 1

        //(動態綁定)實例對象被確定爲gun,就擁有了gun所擁有的所有屬性,

        [arm movToX:70 ToY:70];

        //ak47正在移動到70,70

        [arm fireToX:80 ToY:80];

        //ak47正在開火到80,80

        [arm play];

        //ak47正在播放搶的聲音!

實例對象被確定爲gun,就擁有了gun所擁有的所有屬性,名字和編號都變成gun的名字和編號,調用的是gun內實現的方法。

3.分類:category

           @interface  需要添加方法的類名(分類名)

方法聲明列表

@end


@implementation  需要添加方法的類名(分類名)

 方法的具體實現

@end

用於給類添加新的方法;分類只能添加新的方法,而不能添加新的實例變量,如果想要添加新的實例變量,可以使用創建新的子類來添加新的變量。分類可以重載該類中的方法,但大家一般不經常這樣使用。

分類中聲明的所有方法,這是和協議很不相同的一個地方。分類使用需謹慎,因爲使用分類不僅會影響類本身,還會影響到它的所有子類。  

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章