Objective-C总结----5.内存管理

2016-10-09  本文已影响28人  鋼鉄侠

可执行程序构成

内存管理不当引起的问题

Objective-C内存管理方式

Objective-C内存管理是通过引用计数实现的,引用计数是一种通过对象的唯一引用,确定对象是否正在被使用。如果对象的引用计数为零时,对象就被视为不再使用,系统将释放这个对象的内存。

苹果公司提供两种方式管理内存:

1.手动管理

手动管理是建立在“对象所有权”概念上的内存管理机制,只要对象的所有者还存在,对象就不会被Objective-C运行时环境释放。

再创建一个指针变量person2,将person赋值给person2,那么person2拥有指向该对象的内存地址。

 -  KNZPerson *person2  = person;

如果person2没有获得该对象的所有权(通过赋值语句无法获得所有权)的话,当person被释放(person不再指向该对象,该对象被释放),那么person2保存的对象地址指向的内存空间不再存在,person2就是悬挂指针,因此我们需要以手动的方式管理对象的生命周期(保留和释放),在编写代码时***(面向类Class设计时添加内存管理代码)***必须遵守一些内存管理规则。

例如:
KNZPerson *person = [[KNZPerson alloc]init];
alloc创建一个对象并且赋予person,计数器+1,当前值为1;
KNZPerson *person2 = [person retain];
person指向的对象发送消息retain,计数器+1,当前值为2;
当person不再指向该对象的话[person release];
计数器-1,当前值为1;
还有指针变量person2指向该对象,该对象不会被释放;
[person2 release];person2也不再指向该对象,计数器-1,当前值为0,
系统认为该对象不再被使用,系统自动调用dealloc方法释放掉该对象。

MRR管理内存情况下如何设计一个类
@autorelease{自动释放代码块}

自动管理ARC

自动引用计数是一种功能强大的内存管理工具。与MRR相同,也是通过对象引用计数器来管理对象保留及释放,编译程序时由编译器分析源代码,在编译代码必要位置自动插入retain和release消息。
苹果公司推荐使用ARC进行内存管理。

ARC使用规则和约定

ARC的生命周期限定符

用来声明常规变量和属性的生命周期

循环引用解决方法weak

上一篇 下一篇

猜你喜欢

热点阅读