iOS学习笔记之内存管理及@property

iOS5之后苹果公司引入了ARC机制,大大方便了ios开发者对内存的管理机制。在iphone 4出世的时候为什么ios在512M的内存中可以运行很大的游戏,保持畅快流畅的状态。得益于ios非常好的内存处理机制。

      在我们现在创建项目的时候,默认会直接引入ARC机制,我们可以关闭ARC机制:在输入框中输入long点击搜索按钮,如图:技术分享

         接下来即可进行老版本的内存操作了。

在老版本中,内存操作采用了引用计数(retainCount)alloc retain(+1)release(-1)

内存管理原则(配对原则):只要出现了new,alloc,retain,就一定配对出现一个release,autorelease

使引入数+1,必须对应的-1,务必成对存在

ClassA *obj1 = [[ClassA alloc] init]; //retaincount = 1

ClassA *obj2 = obj1; //retaincount = 1

[obj2 retain]; //retaincount = 2

当引入计数变为0的时候,会自动调用系统的dealloc系统函数

-(void)dealloc

{

[super dealloc];//注意一定要调用父类函数

NSLog(@"对象被删除");

 }

野指针:

在开发中经常会遇到野指针,系统一般会提示为Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误。因为你访问了一块已经不属于你的内存。

但我们在开发中可能会发现系统并不会时时检测野指针,主要是为了提高编译效率,默认关闭了野指针检测机制,打开方法:技术分享技术分享 

在Enable Zombie Objects上点击对号,关闭即可。

注意:一般我们最好不要打开该机制,这样编译时的效率将大大降低。

内存泄露:

只要对象的retainCount !=0就会一直存在在内存中,不再被使用的对象,一直在内存中没有被销毁,则会造成内存泄露。

@property 参数

1.与set方法内存管理相关参数

retain:要生成符合内存管理原则的set方法(应用与对象类型)

assign:直接赋值(对象类型,基本数据类型)

capy

2多线程相关

nonatomic:不生成多线程代码。(一般都用这个,效率高)

atomic:生成多线程管理代码

3.是否要生成set跟get方法

readwrite:可读可写属性,同时生成set跟get方法

readonly:只读属性,只生成get方法

4.set与get方法名称相关的参数

setter:设置生成set方法的名称

getter:设置生成的get方法名称

实例:

@property(nonatomic,retain)Class *class;

@property(nonatomic,retain)NSString *name;

@property(nonatomic,assign)int age;

@property(nonatomic,assign,readonly)int age;

@property(nonatomic,assign,setter=abc:)int age;//注意有冒号

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。