2012-04-21 88 views

回答

1

否。内存根据其保留计数被释放。一旦达到零,无论用于指向它的变量的值如何,它都将被解除分配。设置一个变量为零是一个好习惯,所以你不要试图访问释放内存。

+0

为什么此代码有效? 'self.a = @“你好”; [self.a release]; NSLog(@“%@”,self.a); ' 并打印'你好' – 2017-09-15 13:28:33

+0

@AshshZaveri好问题。在取消分配时有规则,但是这由运行时管理。 NSString尤其是神奇的:https://stackoverflow.com/a/1390394/901059运行时带来自由,所以要依赖遵守观察行为的规则。 – mydogisbox 2017-09-15 15:20:16

1

如果使用ARC号,当变量超出范围(你的方法返回或块关闭)任何强变量将被释放。最后将变量设置为nil将不起作用。

如果您不使用ARC,请务必在您拥有的对象上拨打releaseautorelease。完成之后,您已删除对该对象的声明,并可将其解除分配。

1

唯一时间设定为nil有任何影响任一使用setFoo时:方法或点notaion用于设定属性。如果您只是将实例变量设置为nil而不是使用点符号或方法,则实际上会泄漏内存。牢记这一点,你可以看到为什么,不,将局部变量设置为零是完全没有效果的。

你应该看看https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html得到的引用计数是如何工作的一个更好的主意。基本上,如果你打电话给它,你也必须释放它。

相关问题