2010-10-29 49 views
2

我不知道是否有可能寫出這樣的事情在.m文件:是否可以在Objective-C擴展中定義ivars?

@interface MyController() {//ERROR here 
    Foo *privateFoo; 
} 
@end 

我做到了,但我得到: Expected identifier or '{' before '{' token,我想我聽到/觀看視頻(WWDC2010)說這是可能或將有可能,目前只有一些體系結構支持它......但我不確定,我不記得視頻名稱。

我希望我能在這裏得到一些建議。

Ignacio。

+0

如果你使用最新構建LLVM編譯器2.0的話,是的,你可以在類的擴展定義實例變量。 – bbum 2010-10-29 05:03:29

+0

根據你嘗試使用時遇到編譯器錯誤的事實判斷,我會說答案是「否」。儘管bbum說,未來這種情況將會發生變化,儘管我的猜測是它將限制在64位運行時。 – JeremyP 2010-10-29 08:32:32

+0

上面提到的舊線程已被Apple刪除。我認爲這個背景信息的新來源可能是[here](http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html)。 – AOphagen 2013-03-28 08:50:31

回答

8

您可以在Xcode 3.2.3或3.2.4中使用clang(「LLVM Compiler 1.5」)在現代運行時(64位/ iOS)中通過將-Xclang -fobjc-nonfragile-abi2添加到其他C標誌構建設置來執行此操作。 (請注意,這實際上是一個選項,而不是兩個)。

此標誌的另一個影響是導致默認情況下合成屬性。

+0

這就是我一直在尋找的,謝謝! – nacho4d 2010-10-29 16:25:35

0

這是不可能的。類別只定義附加行爲,而不是狀態。

+0

這不是一個類,它是一個類的擴展。規則是完全不同的。 – bbum 2010-10-29 05:02:35

+0

我知道它們在語義上略有不同,如下所述:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1 ...但是,沒有其他人說可以將實例變量添加到擴展中。請指出一些描述該行爲的資源,然後我會繼續並刪除我的答案。 – jer 2010-10-29 05:15:15