我想知道,局部变量是否需要设置为 nil 才能在使用后释放变量?
问问题
1041 次
3 回答
1
不会。内存根据其保留计数被释放。一旦它变为零,无论用于指向它的变量的值如何,它都会被释放。将变量设置为 nil 是一种很好的做法,因此您不要尝试访问已释放的内存。
于 2012-04-21T22:34:54.917 回答
1
不。
如果您使用 ARC,则当变量超出范围(您的方法返回或块关闭)时,将释放任何强变量。将变量设置为nil
最后将无效。
如果你不使用 ARC,那么一定要调用你拥有的对象release
。autorelease
完成后,您已经删除了对该对象的声明,并且可以将其释放。
于 2012-04-21T22:37:13.917 回答
1
设置为 nil 的唯一时间是使用 setFoo: 方法或点记法来设置属性时。如果您只是将实例变量设置为 nil 而不是使用点表示法或方法,您实际上会泄漏内存。记住这一点,您就会明白为什么,不,将局部变量设置为 nil 根本没有任何效果。
您应该查看https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html以更好地了解引用计数的工作原理。基本上,如果你对它调用 alloc,你也必须释放它。
于 2012-04-21T22:38:36.723 回答