2009-12-02 37 views
5

文檔說:如何在沒有NSObject的情況下在Objective-C中創建根對象?

雖然不是嚴格的 語言的一部分,isa指針需要 的對象與 Objective-C的運行時系統的工作。對象 需要與結構 objc_object(在objc/objc.h中定義) 在結構 定義的任何字段中「等效」。但是,您很少需要創建自己的根對象 ,並且從NSObject 或NSProxy繼承的對象自動具有isa 變量。

雖然這聽起來不錯,我不知道如何在Objective-C中創建一個根對象嗎?

這是用於學習的目的。我只是想知道這一點。我真的很想看到它。

回答

7

這實際上是一些從C#或Java風格語言遷移過來的「陷阱」。您只需聲明你的類即

@interface MyNewRoot { 
Class isa; 
} 
@end 

VS

@interface MyObject : NSObject { 
} 
@end 

在Java或C#這些將是等效的(在第一種情況下,編譯器會假定System.Object的或Java時不指定超.lang.Object是超類),但是在Objective-C中,不會假設這種默認值,因此會創建一個新的根。

然而,你現在負責你的類的許多功能,你通常認爲它是理所當然的(即使是簡單的事情,如分配或刪除新實例的內存管理等)。這就是你提到的有關struct objc_object和isa實例變量的提示。

+0

添加了isa指針,指向MyNewRoot的定義。你不能擁有一個沒有ivars的對象,你必須至少有指向類的指針。 – NSResponder 2009-12-02 23:49:54

+0

爲了避免錯誤報警_「Class'MyNewRoot'沒有指定基類」_ clang警告,您可能想考慮使用'#pragma clang diagnostic push'和'#pragma clang diagnostic ignored'來包裝界面-Wobjc -root-class「'之前和'#pragma clang diagnostic pop'之後。 – 2013-07-14 14:14:31

相關問題