objective-c學習筆記2

來源:互聯網
上載者:User

標籤:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.