Objective C學習筆記

一、代碼文件類型: java

(1)、[.h]頭文件 c++

(2)、[.m]c代碼 函數

(3)、[.mm]c++代碼 ui

二、調用頭文件的方法#import,且只在沒有調用過的時候調用一次,相似於PHP的require_once。 this

三、字符串NSString spa

經過@標誌符,可由字符串常量定義NSString對象。如, 指針

NSString *f = @」歲月長」; 日誌

四、類(Class) code

(1)、定義 對象

Objective-C定義類先用在.h頭文件裏定義接口,而後在.m代碼文件裏實現。

.h頭文件

 

@implementation到@end之間的部分被看做是類的定義。

.m文件

 

(2)、類實例化

類名*  類實例名=[[類名 alloc] init]

類名*  類實例名=[類名 new]

(3)、類型

Objective-C的對象定義能夠支持強類型的實例,以及弱類型(用「id」表示)的實例的定義。

 

 

(4)、方法(Methods)

方法Methods亦稱函數,在Objective-C的類與java Class相似,能夠定義「實例的方法」和「類的方法」。

用負號[-]表示該方法爲實例的方法

 

(5)、發送消息

Objective-C調用方法是經過發送消息給對應的實例對象。發送消息的方式實際上是和其它的語言同樣就是調用實例對象的方法,Ojbective-C獨特的地方就是方法的調用是經過一個方法名+零個或多個標識符+零個或多個參數,而通常語言只須要一個方法名+零個或多個參數就能夠了。Ojbective-C之因此把調用方法稱爲發送消息,是因其全部的消息發送以後都是動態傳遞給實例對象。而且,若是一個子類定義了一個和父類相同方法名+標識符的方法以後,子類會先收到該消息,而後選擇性的是否繼續將該消息傳遞給父類。

發送消息是經過一對方括號[]來實現,如

實例對象在左邊,消息以及參數等的定義在右邊。且爲避免生成多餘的臨時變量,Objective-C容許直接使用消息的結果,以下

 

(6)、類方法

相似於靜態方法,定義的時候和實例的方法有區別的地方只是在開頭的符號爲加號[+]。

(7)、屬性@property

屬性是一個能夠取代方法的方便符號。在類中聲明定義屬性時,並不建立新的實例,就是一個可以方便快捷的用來訪問實際已經存在的變量的。也就是說,屬性其實並無真正的存儲任何數據。

屬性還能夠定義一些訪問該屬性時的限制或者如何獲取該屬性,例如指定copy用來複制該屬性,readonly用來指定該屬性只讀。

 

調用某實例的屬性有兩種方法,一種是經過方括號,和調用方法相似,另一種是經過點符號[.]。

 

(8)、方法返回值

在Objective-C裏面方法的返回類型須要用圓括號包住,當編譯器看到減號或者加號後面的括號了以後,就會認爲這是在聲明方法的返回值。若不聲明返回值,編譯會給沒有寫顯式返回值的函數加上一個默認的返回值,它的類型是id。

(void)申明沒有返回值。

(9)、self和super

self等同於this,其自己是一個id類型的一個指針變量。

訪問變量self->變量名稱。

super訪問超類的方法或變量。

五、協議和委託(Protocols and Delegates)

Objective-C中的協議(Protocols)相似於經常使用的接口,協議(Protocols)中定義的方法,在類中實現。

 

六、內存使用

(1)、ReferenceCounted,即應用計數,過程:alloc--->retain--->release--->--->release--->dealloc。

(2)、NSAutoreleasePoolalloc

七、打印日誌NSLog

NSLog(@「歲月長,衣衫薄。」);

八、布爾值

在Objective-C裏面,Bool實際上是singed char,YES是1NO0。其裏面的全部邏輯判斷和C語言保持兼容,若是數據不是0判斷爲真,若是數據是0那麼就判斷爲假。

九、SEL、Class、IMP

(1)、Objective-C在編譯的時候,會根據方法的名字(包括參數序列)生成一個用來區分這個方法的惟一標識,這個標識就是SEL類型。

SEL 變量名=@selector(方法名字);

SEL 變量名=NSSelectorFromString(方法名字的字符串);

NSString* 變量名=NSStringFromSelector(SEL 變量名);//返回SEL變量對應的方法名。

(2)、Class相似於java中的Class,能夠用來獲取所定義類的相關信息.。

Class 變量名=[類或對象 class];

Class 變量名=[類或對象 superclass];

Class 變量名=NSClassFromString(類名字的字符串);

NSString* 變量名=NSStringFromClass(Class 變量名);//返回類名字。

(3)、IMP,給一個方法起一個名字,實現動態調用,不用再使用[對象 message]的方式。

Human* human =[Human new];  
 Man* ma=[man new];  //根據方法名say找到該方法的id,將sel與其綁定;  
 SEL sel =@selector(say);//也能夠這樣寫:SEL sel=NSSelectorFromString(@"say");  
 IMP imp1 = [human methodForSelector:sel];       
 IMP imp2 = [ma methodForSelector:sel];       
  
 imp1(human,sel);  
 imp2(ma,sel);  
//由於每一個方法都有本身的地址,這種方式直接找到地址區分相同ID的方法,效率最高,但靈活性不如SEL方式。


十、實例變量做用域

@private

@protected

@public

其意義跟java相應的關鍵字等同。

而類方法在Objective-C裏面,從理論上來講全部的方法都是公有的。

十一、Final

不想讓某個方法被重寫,只需定義一個宏

#define FINAL

相關文章
相關標籤/搜索