博客
关于我
OC 内存管理黄金法则
阅读量:792 次
发布时间:2023-02-22

本文共 792 字,大约阅读时间需要 2 分钟。

在内存管理方面有一个基本的规则需要遵守:每当使用alloc[mutable]copy[withZone:]retain来增加引用计数的方法时,必须对应地使用releaseautorelease进行释放。

理解:对象自身负责管理retainCount的增减,这有助于显著降低内存泄漏的可能性。

实例:

@implementation Person- (void) setDog:(Dog *)aDog{  if(_dog != aDog){    [_dog release];    _dog = [aDog retain];  }}- (id) dealloc{  [super dealloc];  [_dog release];} @end

在这个Person类中,由于setDog函数会对dog对象进行retain操作,但作为使用者你并不知道内部对这个dog对象进行了多少次retain。因此,将release操作放在dealloc中是一个不错的选择,这样在对象被销毁时会自动释放。

补充:对于一些初学者来说,可能会疑惑,随着ARC的出现,是否需要遵循传统的内存管理规则。实际上,ARC和传统的内存管理还是有区别的。ARC是Xcode为我们在源代码中添加了我们手动需要添加的内存管理语句,但本质上它仍然属于手动内存管理的范畴。了解这一点对开发来说非常有帮助。这种方法的好处是将内存管理的重担交给了Xcode,而不是交给运行时环境。如果使用垃圾回收机制来管理内存,运行时环境需要消耗额外的资源,尤其是内存资源。而在Java的亲儿子Android中,由于垃圾回收机制的存在,安卓手机需要配备3GB的内存才能与苹果的1GB内存相比。这额外的2GB内存去哪里了?那就是垃圾回收了。

转载自:https://www.cnblogs.com/ddhjy/p/4487611.html

你可能感兴趣的文章
OO第四单元总结
查看>>
OO第四次博客作业
查看>>
OO面向对象编程:第三单元总结
查看>>
Opacity多浏览器透明度兼容处理
查看>>
OPC在工控上位机中的应用
查看>>
VSCode在终端中使用yarn命令
查看>>
OPEN CASCADE Curve Continuity
查看>>