Objective-c學習筆記objective-c
1.cocoa的對象初始化通常使用alloc和init兩個方法,不適用new,其中alloc用於分配內存,init用於初始化,由於初始化方法返回的對象可能和分配的對象不一樣,以下xcode
[[類名 alloc] init]函數
2.初始化方法init的編寫通常會用到super關鍵字,由於初始化對象以前必須先初始化父類,並檢查父類的初始化是否成功,以下學習
if(self = [super init]){dosomething}//這一句說明返回的不是nil,能夠繼續進行下去ui
else return self;//返回的是nil,直接不用了spa
3.mac的不少類都包含有便利初始化函數,調用這些初始化方法的時候請記得alloc指針
[[類名 alloc] 便利初始化方法]code
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.委託,就是指一個類中包含一個委託對象,該委託對象必須實現一個指定的協議,類靠協議來約束委託對象的行爲.