Objective-C 内存管理2
2015-09-06 17:14
519 查看
手动内存管理(MRC)中常用的三个方法
retain:导致内存计数+1
release:导致内存计数-1
copy:复制出来一个新的对象 和之前对象的数据可能一致 但是 不是同一个对象 此对象内存计数是1
autorelease:自动释放 当变量出了自动释放池之后会自动释放
自动释放池在项目中有很多看不见的
属性描述关键字:
属性生命时retain加的1 会在当前对象销毁时 执行dealloc方法的时候 执行release -1
readonly:如果用readonly修饰 会使属性只生成get方法 没有set方法
nonatomic:非原子性操作 不安全 效率高 非多线程都用nonatomic
atomic:原子性操作 线程安全 效率低 只有多线程访问数据的时候才有可能会使用此关键字
所有的基本数据类型用assign或weak但是因为是默认的 所以什么都不用写
所有的对象类型(除了NSString)都用 strong或retain
NSString需要用copy来修饰,为了避免连锁反应 改变了某一个字符串 导致一系列相关字符串发生改变。
retain:导致内存计数+1
release:导致内存计数-1
copy:复制出来一个新的对象 和之前对象的数据可能一致 但是 不是同一个对象 此对象内存计数是1
autorelease:自动释放 当变量出了自动释放池之后会自动释放
自动释放池在项目中有很多看不见的
属性描述关键字:
retain/strong: //如果是retain 会做两件事 //-(void)setNames:(NSMutableArray *)names{ // //第一件事把原来的release -1 // [_names release]; //// 第二件事把新传递进来的retain +1 // _names = [names retain]; // // //}
属性生命时retain加的1 会在当前对象销毁时 执行dealloc方法的时候 执行release -1
assign/weak: //如果是assign或weak set方法中只做了一件事 //-(void)setAge:(int)age{ // // _age = age; // //}
copy: //如果是copy set方法中做一件事 //-(void)setNames:(NSMutableArray *)names{ // // _names = [names copy]; //}
readonly:如果用readonly修饰 会使属性只生成get方法 没有set方法
nonatomic:非原子性操作 不安全 效率高 非多线程都用nonatomic
atomic:原子性操作 线程安全 效率低 只有多线程访问数据的时候才有可能会使用此关键字
所有的基本数据类型用assign或weak但是因为是默认的 所以什么都不用写
所有的对象类型(除了NSString)都用 strong或retain
NSString需要用copy来修饰,为了避免连锁反应 改变了某一个字符串 导致一系列相关字符串发生改变。
相关文章推荐
- Objective-C 数组NSArray
- iOS开发Objective-C 语言变量的作用域
- Objective-C Block一步一步分析
- 《A Fragment-Based Approach to Object Representation and Classifiacation》阅读翻译
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Effective Java 英文 第二版 读书笔记 Item 5:Avoid creating unnecessary objects.
- Objective-C Runtime 运行时:成员变量(ivars)及属性
- 常见问题总结篇二、 对Autolayout VFL(Visual Format Language) 的扩展
- openstack kilo compute更新后报错IncompatibleObjectVersion: Version 1.2 of PciDeviceList is not supported
- java 中 List<Object []>的用法
- java基础类:Object类和Math类
- Objective-C 之NSString及常用方法
- json教程系列(3)-JSONObject的过滤设置
- json教程系列(2)-生成JSONObject的方法
- iOS7之后JavaScript与Objective-C之间的通信
- dop object 中的属性运用
- OC基础教程1-Hello Wrold(OS X版)
- JSONObject与JSONArray的使用
- Objective-C 面向对象(类II)
- error: allocating an object of abstract class type