0

我在 mainView 类中有一个这样声明的属性:

@property (nonatomic, retain) FriendsView *friendsView;

出于某种原因,当 mainView 存在时,它并没有被释放。*除非* 我self.friendsView = nil在 mainView 的 dealloc 方法中这样做。

很奇怪。但是等等,它变得更奇怪了..

当我在仪器中运行它时,它会正确地释放,100% 的时间。
当我正常运行时,在friendsView的dealloc方法中使用断点和NSLog,它们永远不会被击中。

关于可能发生什么的任何想法?

编辑:我应该说,我正在使用 ARC。因此我的困惑。

4

1 回答 1

1

如果您在任何地方设置该属性,那么您将增加保留计数,并且不应在 mainView 存在时释放它,并且您应该释放它的 mainView 的 dealloc。这是预期的行为,并不奇怪。当你有一个保留或复制对象属性时,你应该在 init 上做:

friendsView = nil;

在dealloc上:

[friendsView release]; //(or self.friendsView = nil which accomplishes the same)

属性的行为不像您添加到视图中的对象,当父视图存在时它​​们将被释放。如果它们的保留计数 > 0,它们将在父对象被释放后存活。

于 2012-05-14T17:40:42.667 回答