瞭解Objective-C特點及特徵

來源:互聯網
上載者:User

瞭解Objective-C特點及特徵是本文要介紹的內容,目前好象只有Apple使用Objective-C作為其支援的語言吧。 不多說,直接來看詳細內容,與C++的不同之處有:

Objective-C中所有的類都必須繼承自NSObject。

Objective-C中所有對象都是指標的形式。

Objective-C用self代替this。

Objective-C使用id代替void*。

Objective-C使用nil表示NULL

Objective-Ck只支援單繼承。

Objective-C使用YES/NO表示TRUE/FALSE

Objective-C使用#import代替#include

Objective-C中用訊息表示類的方法,並採用[aInstance method:argv]調用形式。

Objective-C支援反射機制

Objective-C支援Dynamic Typing, Dynamic Binding和Dynamic Loading。

與C++的相同之處有:

與C共用的部分一致。

可以使用assert(BOOL), 一般用NSCParameterAssert(BOOL)代替。

Objective-C中的命名首碼說明:

 
  1. NS-:NextStep   
  2. CF-:Core Foundation   
  3. CA-:Core Animation   
  4. CG-:Core Graphics   
  5. UI-:User Interface  

Objective-C中的訊息特殊性:

調用訊息的類可以不知道如何響應這個訊息。如果它不知道如何處理這個訊息,它會自動的將這個訊息轉給其他的類,比如它的父類。

調用訊息的類可以是nil。在C++中,在使用類方法之前,我們都需要檢查對象是否為空白,所以在實現解構函式的時候,常會有如下的代碼,如if (var) { delete var; } 但是在Objective-C中,我們就可以直接寫[var release]; 即使var == nil, 也不會有問題。

Objective-C中的函式宣告格式有:

 
  1. -/+ (return type) function_name;   
  2. -/+ (return type) function_name : (parameter type) parameter;   
  3. -/+ (return type) function_name :   
  4. (parameter type) parameter1 otherParameter :   
  5. (parameter_type) parameter2  

以上參數說明:-表示一般函數,+表示靜態函數。otherParameter是參數的別名(第一個參數的別名省略),在函數調用時方便指定。

Objective-C中的構造/解構函式

Objective-C中的init()/release()對應於C++的構造/解構函式。alloc()/dealloc()也就對應於C++的new和delete,其中的dealloc()由於引用計數的自動調用而不用手動調用。

Objective-C中父類的init()/release()函數需要子類的手動調用。而且每次都必須調用。不同於C++的自動調用。

建構函式(- (id) init)調用形如:CSample* pSample=[CSample alloc] init];其中alloc(+ (id) alloc)是繼承來的static函數,init是繼承來的一般函數,如重寫一般函數時,則相當於C++的覆蓋(不帶參數)或重載(帶參數)。

解構函式(- (void) release)將引用計數減1,當=0時父類的release()會自動調用dealloc(- (void) dealloc);

當Objective-C沒有資料成員時,可省略{},建議保留。

繼承下來的方法,如:-(id) init可以標頭檔中省略,建議保留

0-C中只有資料成員的訪問限制,沒有方法的訪問限制。

同C++一樣,資料成員有三種訪問限制public, protected, private,預設是protected。

樣本:

 
  1.  @interface AccessExample: NSObject {  
  2. @public  
  3.     int publicVar;  
  4. @protected  
  5.     int protectedVar;  
  6. @private  
  7.     int privateVar;  
  8. }  
  9. @end  

方法的訪問限制可通過Category實現

樣本:

 
  1. @interface MyClass  
  2. - (void) sayHello {  
  3.     NSLog(@"Hello");  
  4. }  
  5. @end  
  6.     
  7. @interface MyClass(Private)  
  8. - (void) kissGoodbye;  
  9. @end  

Objective-C中沒有類的靜態變數,只有全域變數

Objective-C中的數組NSArray可以儲存不同類型的資料。

Objective-C也支援run-time時的類類型檢查

 
  1. - (BOOL) isKindOfClass: classObj 

用於判斷該對象是否屬於某個類或者它的子類

 
  1. - (BOOL) isMemberOfClass: classObj 

用於判斷該對象是否屬於某個類這裡不包括子類)

 
  1. - (BOOL) respondsToSelector: selector 

用於判斷該對象是否能響應某個訊息。這裡,我們可以將@selector後面帶的參數理解為C++中的函數指標。

注意:

1)不要忘了@

2)@selector後面用的是(),而不是[]。

3)要在訊息名稱後面跟:,無論這個訊息是否帶參數。如:

 
  1. [pSquare respondsToSelector:@selector(Set: andHeight:)]。   
  2. + (BOOL) instancesRespondToSelector: selector 

用於判斷該類是否能響應某個訊息。這是一個靜態函數

-(id) performSelector: selector :調用對象的selector方法。

conformsToProtocol 類似於respondsToSelector ,用於動態檢查某個對象是否遵守某個協議。

Category:在沒有原始碼的情況下,為一個已經存在的類添加一些新的功能

只能添加新的方法,不能添加新的資料成員

Category 的名字必須是唯一的

Protocol:相當於C++中的純虛類

形如:

 
  1. @interface MyDate: NSObject <Printing> { } @end  

使用:

 
  1. MyDate * dat = [[MyDate alloc] init]; id<Printing> var = dat; [var print]。  

說明:我們首先聲明了Printing 協議,任何遵守這個協議的類,都必須實現print 方法。在Objective-C 中,我們通過<>來表示遵守某個協議。當某個類聲明要遵守某個協議之後,它就必須在.m檔案中實現這個協議中的所有方法。使用id<Printing> 作為類型,而不是象C++中的Printing* var。

IBOutlet, IBAction: 這兩個東西其實在文法中沒有太大的作用。如果你希望在Interface Builder中能看到這個控制項對象,那麼在定義的時候前面加上IBOutlet,在IB裡就能看到這個對象的outlet,如果你希望在Interface Builder裡控制某個對象執行某些動作,就在方法前面加上(IBAction)。

盡量避免在一行語句中進行兩層以上的嵌套

訊息轉寄:

 
  1. - (void) forwardInvocation: (NSInvocation*)anInvocation;  

小結:瞭解Objective-C特點及特徵的內容介紹完了,希望本文對你有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.