我正在使用ARC。我有一个方法,在我写的游戏结束时运行,它应该清理内存。 NSMutableArray
中有一系列对象,我使用removeObject:
删除它们。然后我将这些对象设置为nil
。但是,在这些对象上使用NSLog
表示它们仍然存在。为什么将它们设置为nil
不会将它们从内存中删除?
答案 0 :(得分:1)
在ARC(自动引用计数)中,将对象的引用设置为nil
意味着两种不同的东西,具体取决于您正在使用的引用类型:
如果它是strong
引用,那么对它进行修改意味着减少引用对象的引用计数;
如果它是weak
引用,则无效。
因此,niling可以导致不同的结果。具体而言,仅当引用计数变为零时才释放对象。这将对应于系统中没有其他对象拥有第一个对象的情况(这意味着对其进行strong
引用)。
因此,在您的情况下,可能有一些其他对象保留strong
对您尝试nil
的对象的引用;或者,你可能是一个弱的参考。如果你展示了一些代码,它可能会变得更加清晰。