我在想,局部变量是否需要设置为零才能释放使用后的变量?目标c:使用它释放内存后需要将局部变量设置为零吗?
2
A
回答
1
否。内存根据其保留计数被释放。一旦达到零,无论用于指向它的变量的值如何,它都将被解除分配。设置一个变量为零是一个好习惯,所以你不要试图访问释放内存。
1
如果使用ARC号,当变量超出范围(你的方法返回或块关闭)任何强变量将被释放。最后将变量设置为nil
将不起作用。
如果您不使用ARC,请务必在您拥有的对象上拨打release
或autorelease
。完成之后,您已删除对该对象的声明,并可将其解除分配。
1
唯一时间设定为nil有任何影响任一使用setFoo时:方法或点notaion用于设定属性。如果您只是将实例变量设置为nil而不是使用点符号或方法,则实际上会泄漏内存。牢记这一点,你可以看到为什么,不,将局部变量设置为零是完全没有效果的。
你应该看看https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html得到的引用计数是如何工作的一个更好的主意。基本上,如果你打电话给它,你也必须释放它。
相关问题
- 1. 我需要释放局部变量吗?
- 2. 释放后是否将对象设置为零所需?
- 3. 将uiimage设置为零不会释放内存与ARC
- 4. Capybara-webkit需要大量的内存。我怎么能释放它?
- 5. 如何释放局部变量的动态分配内存?
- 6. 使用ARC时还需要释放任何内存吗?
- 7. 需要设置全局变量
- 8. 正在释放需要Objective-c 2.0属性的内存吗?
- 9. 使用PInvoke中的结构后,是否需要释放内存?
- 10. 使用后释放内存
- 11. 在swift中,是否有必要在使用后将强变量设置为零?
- 12. 即使我不将它设置为零,为什么变量为零?
- 13. 'const gchar *'的含义是什么,使用后需要释放内存吗?
- 14. 如何在目标C中释放和释放这些变量?
- 15. 是否需要释放函数返回的变量的内存(C)?
- 16. 未使用的变量需要明确设定为零
- 17. 将unique_ptr资源设置为nullptr后,它将如何释放?
- 18. 为什么c局部变量需要转换为void?
- 19. 为什么不需要释放使用“assign”设置的Outlet?
- 20. 为什么要设置为零并释放UIViewController的属性?
- 21. 设置一个NSMutableDictionary为零释放引用它的所有内容?
- 22. 当变量不再需要时,将变量设置为空
- 23. 什么时候需要释放内存?
- 24. 我需要释放CFError吗?
- 25. 你需要释放NSData吗?
- 26. 在C++中为const char *变量释放内存
- 27. 我应该在GlobalRealloc之后释放全局内存吗?
- 28. SQL Server - 当其他进程需要时它真的释放内存吗?
- 29. 我可以使用“malloc”作为局部变量来返回局部变量吗?
- 30. 设置环境变量内目标
为什么此代码有效? 'self.a = @“你好”; [self.a release]; NSLog(@“%@”,self.a); ' 并打印'你好' – 2017-09-15 13:28:33
@AshshZaveri好问题。在取消分配时有规则,但是这由运行时管理。 NSString尤其是神奇的:https://stackoverflow.com/a/1390394/901059运行时带来自由,所以要依赖遵守观察行为的规则。 – mydogisbox 2017-09-15 15:20:16