所以我可以有一個參考對象,該對象實現特定協議這樣的:「ID」,它指向一些類或在Objective-C的任何亞類
id<MyAwesomeProtocol> object;
我能有一些類的引用,像這個:
MyAwesomeClass *object;
我想知道,我應該怎麼做才能引用MyAwesomeClass或任何子類。
我當然可以使用id
但我想知道是否有更好的方法。
謝謝!
所以我可以有一個參考對象,該對象實現特定協議這樣的:「ID」,它指向一些類或在Objective-C的任何亞類
id<MyAwesomeProtocol> object;
我能有一些類的引用,像這個:
MyAwesomeClass *object;
我想知道,我應該怎麼做才能引用MyAwesomeClass或任何子類。
我當然可以使用id
但我想知道是否有更好的方法。
謝謝!
若要引用您的類或其子類的一個對象,你仍然可以寫
MyAwesomeClass *object;
一般來說,最好是使用NSObject*
而不是id
。所有客觀C對象都是NSObject
的後代,爲什麼忽略所有的NSObject
好東西?
如果您正在處理MyAwesomeClass
或子類我會使用MyAwesomeClass
*對象。如果你只是使用協議方法(在協議的上下文中),那麼我會使用NSObject <MyAwesomeProtocol> *object
。
當你不知道或關心對象的類時,約定是使用id而不是NSObject *。如果您要使用NSObject *,則在發送NSObject不響應的消息時會收到編譯器警告。 – JeremyP 2010-11-15 11:17:33
請注意,並非每個Objective-C對象都是NSObject的後代。 Foundation框架中目前有兩個根類:NSObject和NSProxy。 – 2012-10-03 10:01:29
哦,不錯,我認爲它會拋出錯誤 - 因爲子類實際上是一個不同的類。這很好,謝謝。 – Vojto 2010-11-18 07:47:57