iOS平台的内存使用引用计数的机制,并且引入了半自动释放机制;这种使用上的多样性,导致开发者在内存使用上非常容易出现内存泄漏和内存莫名的增 长情况; 本文会介绍iOS平台的内存使用原则与使用陷阱; 深度剖析autorelease机制;低内存报警后的处理流程;并结合自身实例介绍内存暴增的问题追查记录以及相关工具的使用情况; iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的 crash,难以发现的内存泄漏,这些都是iOS平台内存相关的常见问题;本文将会详细介绍iOS平台的内存管理机制,autorelease机制和内存 的使用陷阱,这些将会解决iOS平台内存上的大部分问题,提高了程序的稳定性; 1 iOS平台内存管理介绍 iOS平台的内存管理采用引用计数的机制;当创建一个对象时使用alloc或者allWithZone方法时,引用计数就会+1;当释放对象使用release方法时,引用计数就是-1; 这就意味着每一个对象都会跟踪有多少其他对象引用它,一旦引用计数为0,该对象的内存就会被释放掉;另外,iOS也提供了一种延时释放的机制 AutoRelease,以这种方式申请的内存,开发者无需手动释放,系统会在某一时机释放该内存; 由于iOS平台的这种内存管理的多样性,导致开发者在内存使用上很容易出现内存泄漏或者程序莫名崩溃的情况,本文会详细介绍iOS平台内存的使用规范与技 巧以及如何利用工具避免或者发现问题; 2 iOS平台内存使用原则 2.1 对象的所有权与销毁 2.1.1 谁创建,谁释放; 如果是以alloc,new或者copy,mutableCopy创建的对象,则必须调用release或者autorelease方法释放内存; 如果没有释放,则导致内存泄漏! 2.1.2 谁retain,谁释放; 如果对一个对象发送 retain消息,其引用计数会+1,则使用完必须发送release或者autorelease方法释放内存或恢复引用计数; 如果没有释放,则导致内存泄漏! 2.1.3 没创建且没retain,别释放; 不要释放那些不是自己alloc或者retain的对象,否则程序会crash; 不要释放autorelease的对象,否则程序会crash; 2.2 对象的深拷贝与浅拷贝 一般来说,复制一个对象包括创建一个新的实例,并以原始对象中的值初始化这个新的实例。 复制非指针型实例变量的值很简单,比如布尔,整数和浮点数。复制指 针型
iOS平台下的内存管理和一些内存检测的实用方法
最新推荐文章于 2022-03-19 16:48:08 发布