iOS中的内存管理
2014-12-23 22:50
246 查看
要了解内存管理机制, 首先要明白为什么要管理内存, 应用程序出现闪退(Crash)的情况中, 大部分是因为内存的问题, 所以,为了保证应用程序的性能, 必须避免对内存的错误使用, 内存问题主要由两个方面, 内存溢出和野指针
内存溢出: 通俗的讲就是内存不够用,超出了限定的范围
野指针异常: 当一块内存被释放的时候, 还用原来的指针去调用这块内存, 就会造成野指针异常
野指针是程序Crash的主要原因
内存管理的方式分为三种: 垃圾回收机制, MRC管理机制, ARC管理机制
1. 垃圾回收机制: 只需要开辟内存, 不需要用代码来进行释放,系统会自动判断哪些内存空间不再被使用, 自动回收内存空间, 整个过程不需要写任何释放的代码, 由系统自动完成
2. MRC: 手动分配内存空间,手动释放
优点: 对内存的管理更加灵活, 再需要释放的时候及时释放, 但对程序员的要求更高
3. ARC: 本质上还是MRC, 只不过是不需要写释放的代码, 编译器会默认加入释放的代码, 并不是垃圾回收机制
iOS中对内存管理的方式为后两种, MRC 和 ARC , 其中: MRC的内存管理机制是引用计数的概念
引用计数: 每分配一段新的内存空间,它的引用计数就加1, 当释放掉这段内存的时候,引用计数就减1
iOS中能引起引用计数改变的操作:
使引用计数+1 : alloc retaincopy
使引用计数-1 : release autorelease(未来某一时刻使引用计数-1)
需要注意的是:
1. alloc 和 release 是成对出现的, 在alloc一段内存的时候,在使用完后必须release
2. 将一个对象添加到数组或字典中时, 为了确保数组或字典持有这个对象, 它所指向的内存空间的引用计数会+1, 相应的, 当数组或字典的引用计数变为0的时候, 它里面的对象的引用计数也会相应的-1
自动释放池:
当一个对象被加入到自动释放池后,如果自动释放池释放后, 这个对象的引用计数也会-1
在iOS5之后,不再使用NSAutoreleasePool类, 而是以@autoreleasepool{}的方式代替, 需要加入到自动释放池的对象,直接写道大括号里面即可, 出了大括号,引用计数便-1
当一个对象的引用计数变为0, 系统会自动调用dealloc方法, 对内存进行一个回收, 以便下次使用
总结:
iOS中对内存的管理方式有MRC, ARC两种, 其中:
1. ARC不需要写释放内存的代码, 编译器会自动添加, 本质上还是MRC;
2. MRC对内存的管理主要是对引用计数的管理, 当一个对象的引用计数变为0,便会对这块内存进行回收, 保证内存的及时释放,及时利用, 管理更加灵活
内存溢出: 通俗的讲就是内存不够用,超出了限定的范围
野指针异常: 当一块内存被释放的时候, 还用原来的指针去调用这块内存, 就会造成野指针异常
野指针是程序Crash的主要原因
内存管理的方式分为三种: 垃圾回收机制, MRC管理机制, ARC管理机制
1. 垃圾回收机制: 只需要开辟内存, 不需要用代码来进行释放,系统会自动判断哪些内存空间不再被使用, 自动回收内存空间, 整个过程不需要写任何释放的代码, 由系统自动完成
2. MRC: 手动分配内存空间,手动释放
优点: 对内存的管理更加灵活, 再需要释放的时候及时释放, 但对程序员的要求更高
3. ARC: 本质上还是MRC, 只不过是不需要写释放的代码, 编译器会默认加入释放的代码, 并不是垃圾回收机制
iOS中对内存管理的方式为后两种, MRC 和 ARC , 其中: MRC的内存管理机制是引用计数的概念
引用计数: 每分配一段新的内存空间,它的引用计数就加1, 当释放掉这段内存的时候,引用计数就减1
iOS中能引起引用计数改变的操作:
使引用计数+1 : alloc retaincopy
使引用计数-1 : release autorelease(未来某一时刻使引用计数-1)
需要注意的是:
1. alloc 和 release 是成对出现的, 在alloc一段内存的时候,在使用完后必须release
2. 将一个对象添加到数组或字典中时, 为了确保数组或字典持有这个对象, 它所指向的内存空间的引用计数会+1, 相应的, 当数组或字典的引用计数变为0的时候, 它里面的对象的引用计数也会相应的-1
自动释放池:
当一个对象被加入到自动释放池后,如果自动释放池释放后, 这个对象的引用计数也会-1
在iOS5之后,不再使用NSAutoreleasePool类, 而是以@autoreleasepool{}的方式代替, 需要加入到自动释放池的对象,直接写道大括号里面即可, 出了大括号,引用计数便-1
当一个对象的引用计数变为0, 系统会自动调用dealloc方法, 对内存进行一个回收, 以便下次使用
总结:
iOS中对内存的管理方式有MRC, ARC两种, 其中:
1. ARC不需要写释放内存的代码, 编译器会自动添加, 本质上还是MRC;
2. MRC对内存的管理主要是对引用计数的管理, 当一个对象的引用计数变为0,便会对这块内存进行回收, 保证内存的及时释放,及时利用, 管理更加灵活
相关文章推荐
- iOS 的多核编程和内存管理
- ios 开发内存管理原则
- iOS 5编程 内存管理 ARC技术概述
- IOS 5编程 内存管理 ARC技术概述
- iOS内存管理
- IOS 5编程 内存管理 ARC技术概述 .
- iOS-的多核编程和内存管理
- IOS 5编程 内存管理 ARC技术概述 常见问题解答
- IOS内存管理小结
- iOS下Objective-C内存管理
- iOS 5编程 内存管理 ARC技术概述
- iOS内存管理规则
- IOS 5编程 内存管理 ARC技术概述
- iOS的多核编程和内存管理
- [iphone开发多线程之]iOS的多核编程和内存管理
- IOS 5编程 内存管理 ARC技术概述
- iOS 5编程 内存管理 ARC技术概述
- iOS内存管理
- iOS 指南系列: 内存管理