2010-11-15 17 views
0

所以我可以有一個參考對象,該對象實現特定協議這樣的:「ID」,它指向一些類或在Objective-C的任何亞類

id<MyAwesomeProtocol> object; 

我能有一些類的引用,像這個:

MyAwesomeClass *object; 

我想知道,我應該怎麼做才能引用MyAwesomeClass或任何子類。

我當然可以使用id但我想知道是否有更好的方法。

謝謝!

回答

4

若要引用您的類或其子類的一個對象,你仍然可以寫

MyAwesomeClass *object; 
+0

哦,不錯,我認爲它會拋出錯誤 - 因爲子類實際上是一個不同的類。這很好,謝謝。 – Vojto 2010-11-18 07:47:57

1

一般來說,最好是使用NSObject*而不是id。所有客觀C對象都是NSObject的後代,爲什麼忽略所有的NSObject好東西?

如果您正在處理MyAwesomeClass或子類我會使用MyAwesomeClass *對象。如果你只是使用協議方法(在協議的上下文中),那麼我會使用NSObject <MyAwesomeProtocol> *object

+0

當你不知道或關心對象的類時,約定是使用id而不是NSObject *。如果您要使用NSObject *,則在發送NSObject不響應的消息時會收到編譯器警告。 – JeremyP 2010-11-15 11:17:33

+0

請注意,並非每個Objective-C對象都是NSObject的後代。 Foundation框架中目前有兩個根類:NSObject和NSProxy。 – 2012-10-03 10:01:29

相關問題