objective-c學習筆記2


Objective-c學習筆記

1.cocoa的對象初始化一般使用alloc和init兩個方法,不適用new,其中alloc用於分配內存,init用於初始化,因為初始化方法返回的對象可能和分配的對象不同,如下

[[類名 alloc] init]

 

2.初始化方法init的編寫一般會用到super關鍵字,因為初始化對象之前必須先初始化父類,並檢查父類的初始化是否成功,如下

if(self = [super init]){dosomething}//這一句說明返回的不是nil,可以繼續進行下去

else return self;//返回的是nil,直接不用了

 

3.mac的很多類都包含有便利初始化函數,調用這些初始化方法的時候請記得alloc

[[類名 alloc] 便利初始化方法]

 

4.OC2.0中引入了屬性(@property),簡化了代碼的編寫量,(感覺上類似於C#的自動存取方法)

5.使用屬性定義接口

@interface

{

type1 var;

type2 var2;

}

@property type1 var;

@property type2 var2;

@end

6.使用屬性定義的變量,可以通過編譯器內部自動建立的存取方法來訪問.

 

7.在xcode4.5之前,使用@property定義之后,在對應的實現文件@implementation中要使用@synthesize申明一次相應的變量,4.5自后就不需要了

 

8.如果一個變量能在子類中訪問,那么在@interface中聲明@property,並定義變量,如果不想子類訪問,在@interface中只定義@property,不定義變量,在@implementation定義變量,如下

@implementation

{

變量定義

}

@synthesize 變量

@end

 

9.點表達式在編譯器中實際上是調用的屬性訪問方法,而不是直接訪問的屬性,點表達式出現在等號左邊,則為寫 右邊,則為讀

 

10.通過@synthesize指令可以為使用@property的變量定義別名,例如外部導出name1,實際的變量是name2,那么@property聲明name1,在@synthesize中定義 @synthesize name1 = name2

 

11.可以定義變量的讀寫權限,使用@porperty定義的時候聲明,例如

@porperty (readwrite) type var

@porperty (readonly) type var

 

12.當使用@porperty聲明了屬性但是自己又不想用系統自動生成的方法的時候,使用@dynamic可以屏蔽系統自動生成的屬性方法,轉而自己定義

 

13.使用@porperty 也可以為存取方法重命名

 

14.為現有的類添加新的方法的辦法叫做類別,定義方式為

@interface 源類名(類別名)

添加的新方法名

@end

 

15.類別只能添加新的方法,不能添加新的變量,同時類別有着名稱沖突的隱患

 

16.類擴展,類擴展是類別的一種特殊形式,類擴展只能放在類的相關文件中,.h .m,他可以擴展類的變量,還能修改類的訪問屬性,但是,類擴展是沒有名字的,也就是說,類擴展只能供內部使用,這種方式可以很方便的維護代碼

 

17.類別可以實現源代碼的分散管理,可以訪問其繼承的類的實例變量

 

18.cocoa沒有真正的私有方法,即使該對象沒有聲明該方法,只要實現中有就可以調用

 

19.委托是指,一個對象由另一個類請求執行某些工作,比如有一個服務類,他有一個委托對象A,那么服務類會請求對象A是否去做某些工作

 

20.委托對象只需要實現打算調用的方法

 

21.被發送給委托對象的方法可以聲明為NSObject的類別

 

22.響應選擇器 (沒弄明白)

 

23.正式的協議是包含有方法和屬性的名稱列表,必須顯式的調用

24.采用協議的辦法是在類的interface中列出協議的名稱,采用協議之后,類就要遵守該協議,采用協議意味着承諾實現該協議的所有方法

25.協議聲明使用@protocol關鍵字,如下

@protocol 協議名稱

方法 定義

@end

26.協議可以繼承,如下

 

@protocol 協議名稱<父協議名稱>

方法定義

@end

 

27.繼承的協議被類使用的時候,類必須要實現父協議和子協議的全部方法,NSObject類符合NSObject協議,所以自己定的協議可以或者說最好是繼承NSObject協議

 

28.在類中采用協議使用<>,如下

@interface 類名:父類名<協議1,協議2>

@end

 

29.objective-c的對象復制分為淺復制和深復制,其中淺復制只復制指針,深復制復制內容

 

30.可以在使用的數據類型和方法參數中指定協議名稱,如果是數據類型,那么這個數據的類應該符合指定的協議,如果是方法返回值,那么返回值的類也應該符合指定的協議如下

-void function:(id<協議名稱>)var;

 

31.objectivec2.0中增加了兩個新的特性,@option和@required,主要使用在協議的定義中,使用@optional定義的方法,類在使用協議的時候可以可選的實現,使用@required的方法,類在使用協議的時候必須實現

32.委托,就是指一個類中包含一個委托對象,該委托對象必須實現一個指定的協議,類靠協議來約束委托對象的行為.

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: