设置为nil后,对象仍然存在

时间:2013-01-07 10:09:04

标签: objective-c ios memory-management

我正在使用ARC。我有一个方法,在我写的游戏结束时运行,它应该清理内存。 NSMutableArray中有一系列对象,我使用removeObject:删除它们。然后我将这些对象设置为nil。但是,在这些对象上使用NSLog表示它们仍然存在。为什么将它们设置为nil不会将它们从内存中删除?

1 个答案:

答案 0 :(得分:1)

在ARC(自动引用计数)中,将对象的引用设置为nil意味着两种不同的东西,具体取决于您正在使用的引用类型:

  1. 如果它是strong引用,那么对它进行修改意味着减少引用对象的引用计数;

  2. 如果它是weak引用,则无效。

  3. 因此,niling可以导致不同的结果。具体而言,仅当引用计数变为零时才释放对象。这将对应于系统中没有其他对象拥有第一个对象的情况(这意味着对其进行strong引用)。

    因此,在您的情况下,可能有一些其他对象保留strong对您尝试nil的对象的引用;或者,你可能是一个弱的参考。如果你展示了一些代码,它可能会变得更加清晰。