objective-c 强弱引用、properties的学习
2015-05-13 12:22
155 查看
一.强弱引用
强引用:strong reference
弱引用:weak reference
引用可以理解为指针A指向的对象B。换句话说,拥有指针A的对象是对象B的所有者(ownership).
区别:其中strong就相当于retain属性,而weak相当于assign。
1.一般的引用都是强引用。但为什么又提出弱引用呢?
弱引用的提出是为了防止强引用出现reference cycle,也就是指向的死循环,如果出现死循环,容易出现内存泄漏。
2.弱引用的特点是什么?如何使用弱引用?
__weak BNRItem *_container;//使用“__weak”
多个对象A引用某个对象B,都会retain。但是当你指定弱引用后,就不会retain。当对象引用数为0的时候,自动释放,并让把使用弱引用的指针,设置为nil
当对象A使用弱引用,对象A释放空间的时候,指针会变成nil
其他:nonatomic与atomic主要面对的是线程安全的问题,当然使用atomic更安全,获取数据更准备,使用nonatomic,会更高效,原因就是在于加锁的缘故嘛。但是苹果开发一般都使用的是nonatomic
二.properties
@propery NSString *itemName;
此语句做了三件事情:一个实例变量,两个访问实例变量的方法。
propery的属性:
@property (nonatomic, readwrite, strong) NSString *itemName;
多线程属性:有两个值,atomic和nonatomic,默认是使用atomic,但是大多数程序使用nonatomic,其实就是选择是否采用原子操作的问题。例子:@property (nonatomic)NSString *item;
读/写属性:有两个值,readwrite 和readonly ,默认都是readwrite,如果选择readonly,则只有get属性。
内存管理属性:有四个值,strong,weak,copy ,unsafe_unretained,这个属性主要用来描述对象的实例变量指针引用类型。
unsafe_unretained是一个直接的assign。没有retain计数,如果变量指向的对象已经销毁了,其指针值不会自动设置为nil。但是weak属性是可以的,一般用在非对象的引用中。
copy是复制一份数据,能够防止其他拥有者改变数据内容受到的影响
如果你有更多的需求,则可以自己建立,setItem,item方法。
强引用:strong reference
弱引用:weak reference
引用可以理解为指针A指向的对象B。换句话说,拥有指针A的对象是对象B的所有者(ownership).
区别:其中strong就相当于retain属性,而weak相当于assign。
1.一般的引用都是强引用。但为什么又提出弱引用呢?
弱引用的提出是为了防止强引用出现reference cycle,也就是指向的死循环,如果出现死循环,容易出现内存泄漏。
2.弱引用的特点是什么?如何使用弱引用?
__weak BNRItem *_container;//使用“__weak”
多个对象A引用某个对象B,都会retain。但是当你指定弱引用后,就不会retain。当对象引用数为0的时候,自动释放,并让把使用弱引用的指针,设置为nil
当对象A使用弱引用,对象A释放空间的时候,指针会变成nil
其他:nonatomic与atomic主要面对的是线程安全的问题,当然使用atomic更安全,获取数据更准备,使用nonatomic,会更高效,原因就是在于加锁的缘故嘛。但是苹果开发一般都使用的是nonatomic
二.properties
@propery NSString *itemName;
此语句做了三件事情:一个实例变量,两个访问实例变量的方法。
propery的属性:
@property (nonatomic, readwrite, strong) NSString *itemName;
多线程属性:有两个值,atomic和nonatomic,默认是使用atomic,但是大多数程序使用nonatomic,其实就是选择是否采用原子操作的问题。例子:@property (nonatomic)NSString *item;
读/写属性:有两个值,readwrite 和readonly ,默认都是readwrite,如果选择readonly,则只有get属性。
内存管理属性:有四个值,strong,weak,copy ,unsafe_unretained,这个属性主要用来描述对象的实例变量指针引用类型。
unsafe_unretained是一个直接的assign。没有retain计数,如果变量指向的对象已经销毁了,其指针值不会自动设置为nil。但是weak属性是可以的,一般用在非对象的引用中。
copy是复制一份数据,能够防止其他拥有者改变数据内容受到的影响
如果你有更多的需求,则可以自己建立,setItem,item方法。
相关文章推荐
- objective-c基础语法学习之--(6)内存管理经典问题:循环引用
- iOS学习(十二)Objective-C 引用计数器和存取器
- Objective-C 学习笔记 - part 7 - 相关引用
- 【《Objective-C 高级编程》 学习笔记--引用计数】
- Objective-C基础学习笔记(八)-内存管理-autorelease使用-property创建对象的内存管理-循环引用的内管管理
- spring学习笔记——摘录:对properties文件引用的两种方法
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之17-内存管理和自动引用计数——黑马 IOS 技术博客
- 【Objective-C学习笔记】内存管理——ARC自动引用计数
- 【热门论文Top 30】那些被国外专家引用最多的计算机视觉和深度学习论文
- 黑马程序员—Objective-C学习—block和protocol
- Objective-C 学习心得
- Swift4.0 学习笔记 第十九节:解除循环引用
- Java学习笔记(二)——Java操作properties文件
- Objective-C学习之旅 第一篇
- C++学习-引用作为函数参数
- Kotlin学习(十八): 委托模式(Delegate)和委托属性(Delegate Properties)
- Log4J学习【十一】Properties配置方式测试
- Objective-C 学习笔记 11 - 属性Property
- 学习添加引用(以JavaScriptSerializer序列化说明)
- Objective-c学习-4