1

为什么我得到以下输出:

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

1 回答 1

2

你没有使用二传手。您正在使用 ivar(实例变量)。要使用已声明属性的 setter ,请使用以下语法:

self.thePlayer = aPlayer;

这相当于:

[self setThePlayer:aPlayer];

但是在没有对所有者对象的引用(在本例中为self)的情况下,您最终将直接使用实例变量,并且不会调用 setter。因此,在您的原始示例中,您没有使用 setter。

顺便说一句,这就是为什么通常建议在@synthesize语句中使用不同的 ivar 名称的原因,例如:

@synthesize thePlayer = _thePlayer;

That way, you are less likely to accidentally reference the instance variable when you meant the property. And in Xcode 4.4 or later, if you omit the @synthesize statement, this is the default behavior (where the synthesized instance variable will have the leading underscore).

于 2012-09-19T02:20:56.367 回答