iOS学习笔记之内存管理及@property 分类: ios开发 2015-05-15 10:34 174人阅读 评论(0) 收藏
2015-05-15 10:34
489 查看
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;//注意有冒号
在我们现在创建项目的时候,默认会直接引入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;//注意有冒号
相关文章推荐
- Windows驱动开发工具 WDK 学习笔记(1) 分类: windows驱动程序WDM 2013-08-01 11:08 566人阅读 评论(0) 收藏
- unable to IOS simulator 分类: IOS开发 2015-05-15 20:30 28人阅读 评论(0) 收藏
- 常用的@property参数 分类: ios开发 2015-05-28 16:36 195人阅读 评论(0) 收藏
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
- 软件开发过程学习笔记(一)之软件开发流程 分类: 开发过程 2015-07-08 12:43 9人阅读 评论(0) 收藏
- 软件开发过程学习笔记(二)之软件需求模板 分类: 开发过程 2015-07-08 12:51 8人阅读 评论(0) 收藏
- 软件开发过程学习笔记(三)之概要设计说明书模板 分类: 开发过程 2015-07-08 14:45 14人阅读 评论(0) 收藏
- 软件开发过程学习笔记(四)之详细设计说明书模板 分类: 开发过程 2015-07-08 14:46 12人阅读 评论(0) 收藏
- 软件开发过程学习笔记(五)之测试方案模板 分类: 开发过程 2015-07-08 14:48 8人阅读 评论(0) 收藏
- 软件开发过程学习笔记(六)之测试报告模板 分类: 开发过程 2015-07-08 14:50 8人阅读 评论(0) 收藏
- android开发之broadcast学习笔记 分类: android 学习笔记 2015-07-19 16:33 32人阅读 评论(0) 收藏
- ios基础控件之开关按钮(UISwitch) 分类: ios开发 2015-04-08 21:24 188人阅读 评论(0) 收藏
- Ubuntu学习笔记 分类: Ubuntu学习笔记 2015-04-09 19:52 79人阅读 评论(0) 收藏
- UIAlertView和UIActionSheet 分类: ios开发 2015-04-09 20:43 152人阅读 评论(0) 收藏
- UIPageControl+UIScrollView 分类: ios开发 2015-04-09 20:48 160人阅读 评论(0) 收藏
- UIViewController 分类: ios开发 2015-04-10 21:00 170人阅读 评论(0) 收藏
- iOS 的MVC设计模式 分类: ios开发 2015-04-11 09:16 173人阅读 评论(0) 收藏
- iOS开发 改变UINavigationController的UINavigationBar的高度和背景图片 分类: ios技术 2015-04-16 15:49 233人阅读 评论(0) 收藏
- 多线程之GCD(一) 分类: ios开发 2015-04-17 17:58 357人阅读 评论(0) 收藏
- iOS开发之隐藏tabbar--解决隐藏后依然不能响应对应位置事件的问题 分类: ios技术 2015-04-21 11:24 261人阅读 评论(0) 收藏