黑马程序员-assign、retain、release、nonatomic、atomic、strong、weak
2015-08-21 10:30
429 查看
都是用于修饰@property声明的变量
assign:用于非oc对象类型,表示直接赋值(默认值)
retain:用于mrc中,用于类属性中有oc对象的情况,表示先判断赋值的对象是否和实例对象变量的值相等,
若不相等则先retain在赋值。(即release旧值,retain新值,用于修饰对象)
release:用于mrc中,将对象的引用计数减1
atomic:用于多线程,保证原子性,效率低(默认)
nonatomic:修饰不需要多线程的属性,效率高
strong:用于arc中,强指针,用于修饰oc对象,当类属性中有对象时用其修饰。相当于mrc中的retain
weak:用于arc中,弱指针,一般用于修饰UI控件。当其指向的对象被释放时,会将该对象指针的值置为nil。
不能用__weak直接修饰一个对象指针变量,因为用其修饰后,对象以创建就要被释放
范例:
__weak Person * p1 = [Person new]; //报警告,对象没有强指针指向,一创建就要被释放
copy:用于修饰NSString和block类型的成员变量,是浅复制,不会申请新的内存空间。release旧值copy
新值
mutableCopy:用于修饰NSString和block类型的成员变量,是深复制,会重新申请一块内存空间。
mrc内存管理原则:谁创建谁release ,谁retain谁release
arc内存管理原则:当一个对象没有强指针指向时,该对象就被立即释放,arc中不能调用[super dealloc]
对象的循环引用的解决方法:人拥有一条狗,狗又有一个主人,这就是对象的循环引用
mrc中:一端用retain,一端用assign;retain端要在dealloc方法中先release该类的对象属性
arc中:一端用strong,一端用weak
assign:用于非oc对象类型,表示直接赋值(默认值)
retain:用于mrc中,用于类属性中有oc对象的情况,表示先判断赋值的对象是否和实例对象变量的值相等,
若不相等则先retain在赋值。(即release旧值,retain新值,用于修饰对象)
release:用于mrc中,将对象的引用计数减1
atomic:用于多线程,保证原子性,效率低(默认)
nonatomic:修饰不需要多线程的属性,效率高
strong:用于arc中,强指针,用于修饰oc对象,当类属性中有对象时用其修饰。相当于mrc中的retain
weak:用于arc中,弱指针,一般用于修饰UI控件。当其指向的对象被释放时,会将该对象指针的值置为nil。
不能用__weak直接修饰一个对象指针变量,因为用其修饰后,对象以创建就要被释放
范例:
__weak Person * p1 = [Person new]; //报警告,对象没有强指针指向,一创建就要被释放
copy:用于修饰NSString和block类型的成员变量,是浅复制,不会申请新的内存空间。release旧值copy
新值
mutableCopy:用于修饰NSString和block类型的成员变量,是深复制,会重新申请一块内存空间。
mrc内存管理原则:谁创建谁release ,谁retain谁release
arc内存管理原则:当一个对象没有强指针指向时,该对象就被立即释放,arc中不能调用[super dealloc]
对象的循环引用的解决方法:人拥有一条狗,狗又有一个主人,这就是对象的循环引用
mrc中:一端用retain,一端用assign;retain端要在dealloc方法中先release该类的对象属性
arc中:一端用strong,一端用weak
相关文章推荐
- 黑马程序员-block使用细节
- 链表问题大总结---------(面试官最喜欢的问题)
- 黑马程序员-OC类小结
- 佛山 开发者 程序员 ios 安卓 外包团队
- 黑马程序员——Java多线程与并发编程
- 黑马程序员-----Java基础-----Map
- 黑马程序员--抽象类与接口
- 黑马程序员-java基础-IO流的简单介绍
- 面试宝典_JVM
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 常见面试题2
- 黑马程序员-java基础-去除ArrayList中重复的字符串方法2
- 黑马程序员-java基础-去除ArrayList中重复的字符串
- 经同学推荐到携程的数据挖掘岗位的电话面试题
- 黑马程序员-java基础-List集合的特有遍历功能
- 黑马程序员-java基础-List集合的特有功能
- 黑马程序员-java基础-并发修改异常产生的原因和解决方案
- 职业规划
- 黑马程序员—IOS加强视频—oc内存管理
- 【LeetCode-面试算法经典-Java实现】【155-Min Stack(最小栈)】