为什么我得到以下输出:

@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/

10-10 21:05