我有一个类,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。 –
原始只读属性的声明在哪里?在超类的主界面? –