Objective-C内存管理

        为什么需要进行内存管理,如果一个程序所占用的内存达到一定值时系统就会发出警告,当这个值达到峰值的时候程序就会闪退,所以为了程序执行的流畅,用户更好的体验,必须进行内存管理。

        Objective-C是通过引用计数的机制来管理内存的,管理的范围就主要是基于NSObject的子类,对基本数据类型无效。通过对引用计数的控制来决定是否要释放内存,如果对象的引用计数为0,那么就会调用对象的dealloc方法来释放该对象的内存,这里需要注意的是并不是调用release方法销毁对象,release只会将对象引用计数减1,我们在使用对象的过程中大部分引用计数都为1,所以调用release确实可以达到释放内存的效果,但要注意他的实质还是引用计数为0才会销毁对象。

        在Objective-C中copy、retain、alloc和将对象添加到数组中都会使对象引用计数+1,在iOS4.0之后苹果引入了ARC内存自动管理,但是我们还是需要明白其原理,有的时候可能也需要我们自己加入一些局部的内存管理。比如当我们使用for循环的时候,在循环内创建了对象,而对象都放入自动释放池里面,只有当自动释放池被销毁的时候才会释放内存,那么自动什么时候释放呢?通过Observer监听Runloop的状态,一旦监听到Runloop进入睡眠状态就会释放自动释放池。那么当for循环内的对象创建分配空间已经超出了内存的大小就会造成内存溢出,那么就需要我们在for循环内加入自动释放池:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

[pool drain]; 

这样防止内存溢出,当然这种情况可能不会出现。

或者for循环比较大,我们也可以使用@autoreleasepool {} 放在for循环外,for循环结束后释放对象,解决占用栈区内存问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理的问题#   先看看下面的几段代码,重温一下使用内存常见的问题。   C语言中内存操作常见错误: 内存分配...
    DeanYan阅读 4,603评论 0 1
  • 内存管理 内存管理原则 自己生成的对象自己持有alloc、new、copy、mutable以及符合以这些关键字为前...
    小强七号阅读 1,755评论 0 0
  • 一.开篇之初 内存管理解决的问题就是:1)防止野指针的生成(野指针:指向变量的指针还存在,但是所指向的内存已经被释...
    半纸渊阅读 4,605评论 0 1
  • Objective-C 内存管理 在 Objective-C 中,对象通常是使用 alloc 方法在堆上创建的。 ...
    开发者zhang阅读 4,218评论 0 3
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    余生动听阅读 13,585评论 0 11