標籤:
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.委託,就是指一個類中包含一個委派物件,該委派物件必須實現一個指定的協議,類靠協議來約束委派物件的行為.
objective-c學習筆記2