为什么我得到以下输出:
@property (nonatomic, retain) Player *thePlayer;
然后,在.m中:
NSLog(@"aPlayer retain count = %i",[aPlayer retainCount]);
thePlayer = aPlayer;
NSLog(@"thePlayer retain count = %i",[thePlayer retainCount]);
给出:
2012-09-18 21:52:36.787 Pocket Dungeons[56613:10a03] aPlayer retain count = 1
2012-09-18 21:52:36.788 Pocket Dungeons[56613:10a03] thePlayer retain count = 1
最佳答案
您没有使用二传手。您正在使用ivar(实例变量)。要使用declared property的设置器,请使用以下语法:
self.thePlayer = aPlayer;
等效于:
[self setThePlayer:aPlayer];
但是在没有引用所有者对象的情况下(在本例中为
self
),您将最终直接使用实例变量,并且不会调用setter。因此,在您的原始示例中,您没有使用setter。顺便说一下,这就是为什么通常建议在
@synthesize
语句中使用不同的ivar名称的原因,例如:@synthesize thePlayer = _thePlayer;
这样,当您使用该属性时,您不太可能偶然引用实例变量。在Xcode 4.4或更高版本中,如果省略
@synthesize
语句,则这是默认行为(合成的实例变量将使用前划线表示)。关于ios - 二传手不保留,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12487584/