分配到保留属性时为什么不释放?

时间:2010-06-20 23:15:38

标签: objective-c retaincount

此问题与this one有关,但更简单。 [我想我可能接近这些愚蠢问题的结尾,可以开始认真的事情:)。

我有一个retain属性并设置为:

UINavigationController *thing = [[UINavigationController alloc] initWithRootViewController:one];
    // thing's retain count is one
navController = thing;
    // thing's retain count is still one!
[thing release];
    // now retain count is zero, which is wrong

我无法理解为什么保留计数变为零。 navController定义为

@property (nonatomic, retain) UINavigationController *navController;

该属性不应该将保留计数增加一个吗?

1 个答案:

答案 0 :(得分:7)

问题是:您直接分配给属性的底层实例变量而不是调用setter。属性魔法不会以这种方式触发。尝试

self.navController = thing;
而是(剩下的代码不需要改变)。