2009-12-16 95 views
18

任何人都可以告訴我什麼尖括號「<...>」在一個Obj-C類接口嗎?像這樣... http://snipt.net/robhawkes/cocoa-class-interfaceObj-C類接口中的尖括號「<…>」是什麼?

@interface MapMeViewController : UIViewController <CLLocationManagerDelegate, 
      MKReverseGeocoderDelegate, MKMapViewDelegate, UIAlertViewDelegate> { ... } 

從我的觀點它們看起來像某種類型聲明的(考慮到我以前在PHP和JavaScript的經驗),就像我們確保MapMeViewControllerCLLocationManagerDelegateMKReverseGeocoderDelegateMKMapViewDelegate,或UIAlertViewDelegate

有關@interface語法的文檔似乎沒有提到這一點。

回答

35

類接口定義中的尖括號表示您的類符合的協議。

協議幾乎就像Java或C#中的接口一樣,另外Objective-C協議中的方法可以是可選的。

另外在Objective-C中,您還可以聲明變量,參數或實例變量以符合多種協議。實施例

NSObject<NSCoding, UITableViewDelegate> *myVariable; 

在這種情況下,類必須是NSObject或子類(僅NSProxy及其子類將失敗),並且它也必須符合兩個NSCodingUITableViewDelegate協議。

在Java或C#中,這隻能通過實際聲明所述類來實現。

4

Apple文檔報告使用括號;見第4章「採用議定書」中的The Objective-C Programming Language

採用協議在某些方面類似於聲明超類。兩種方法都分配給這個類。超類聲明分配它的繼承方法;該協議分配它在協議列表中聲明的方法。一類是說通過一個正式的協議,如果在其聲明它的超類名稱後面列出尖括號內的協議:

@interface ClassName : ItsSuperclass < protocol list > 

分類採用協議在大致相同的方式:

@interface ClassName (CategoryName) < protocol list > 
6

你也可以像轉換一樣在代碼中使用它們來告訴編譯器期望一個符合特定協議的對象。

id <NSFetchedResultsSectionInfo> sectionInfo = [[self.noteFetcher sections] objectAtIndex:section]; 
相關問題