我有一個類,BPGameEngine
,只有一個屬性,currCharacter
。過去,我一直在BPGameEngine
內直接分配給伊娃(如_currCharacter = someCharacter;
)。在子類中,我發現自己需要寫此屬性,因此它重新聲明在一個匿名類,像這樣爲什麼分配給這個伊娃不起作用?
@interface BPGameKitMPGameEngine()
@property (readwrite, assign) BPCharacterInstance* currCharacter;
@end
然後,編譯器出現錯誤(其中,奇怪的是,我無法重現了,過兩天後來),這暗示需要一個@synthesize語句,所以我在子類(BPGameKitMPEngine
)中添加了@synthesize currCharacter = _currCharacter;
。
我做了不是在超類中添加了一個類似的匿名類別,因爲我只是直接使用了iVar。然後我發現_currCharacter = someCharacter;
裏面的方法BPGameEngine
在BPGameKitMPEngine
調用超級([super methodContainingAssignmentToCurCharIvar]
)根本沒有做什麼。 _currCharacter
出現在調試器中,並且someCharacter
不是零,但在執行該行後,_currCharacter
保持爲nil
。奇怪的是,在子類中添加一個類似的匿名類別解決了這個問題,就像刪除了@synthesize
(不再導致Xcode抱怨編譯器錯誤)一樣。
對@synthesize
的不一致要求看起來像是Xcode中的一個錯誤,但其餘部分卻讓我難堪。有人可以解釋在子類中使用@synthesize
的問題嗎?
爲什麼你的對象屬性'assign'?你沒有使用ARC? –
我確實沒有使用ARC。 –
原始只讀屬性的聲明在哪裏?在超類的主界面? –