2013-02-06 128 views
1
#import <UIKit/UIKit.h> 

@protocol myProtocol <NSObject> 

-(void)aMethod; 

@end 

@interface ViewController : UIViewController 

@property (weak) id<myProtocol> dSource; 

@end 

我想要牢牢抓住Obj-c協議,我正在讀蘋果doc去學習,很少有東西不清楚。以下是在點從DOC:需要協助理解objective-c協議

  1. 餅圖視圖類接口將需要一個屬性來跟蹤數據源對象的。 (上面的代碼中,我們主要是申報協議這種方式,當我有協議,在我的類中聲明爲什麼需要追蹤被攝體,或協議可以在獨立的類中定義?爲此,我們需要跟蹤對象?)

  2. 通過在屬性上指定所需的協議一致性,如果您嘗試將屬性設置爲不符合協議的對象,則會收到編譯器警告。

  3. 如果您嘗試調用上面定義的符合協議的id的respondsToSelector:方法,則會出現編譯器錯誤,表明沒有已知的實例方法。一旦你使用協議限定了一個id,所有的靜態類型檢查都會回來;如果您嘗試調用未在指定協議中定義的任何方法,則會出現錯誤。避免編譯器錯誤的一種方法是將自定義協議設置爲採用NSObject協議。

回答

1
  1. 我不明白這個問題
  2. 正確,物業要求物業是 符合你的財產,如果你嘗試將它設置爲別的一個id 編譯器正確地抱怨
  3. 這是因爲respondsToSelector:是對NSObject 協議的方法,讓你可以有你的協議延長NSObject (標準),或者你可以申報財產爲 NSObject
+0

感謝您的回覆,在第1點我要求的主要是協議的編寫方式就像在代碼片段,所以當協議在我的課爲什麼要聲明一個跟蹤對象? –

+0

它可以讓你在課堂之外移動這個功能。例如。 UITableViewDatasource在UITableView頭文件中聲明,但在那裏聲明,所以你不必爲了自定義它的功能而繼承UITableView。 – wattson12

+0

意思是我可以將協議聲明爲一個獨立的頭文件並使用跟蹤對象。 –