objective-c 强弱引用、properties的学习
一.强弱引用
强引用: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 强弱引用、properties的学习的更多相关文章
- OC强弱引用的使用规则
强弱引用的唯一区别只是体现在对象的消亡上. 当一个对象不再有强引用指向它时,它就会被销毁. 弱引用不持有对象,不计入自动引入计数,所以不用考虑它销毁的问题.
- Spring如何引用properties文件里的…
[zt]Spring如何引用properties文件里的配置 来自 http://blog.csdn.net/luobo525/archive/2006/11/06/1370258.aspx 1.Pr ...
- java.util.Properties类 学习笔记
学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...
- spring如何引用properties文件里的配置
1.PropertyPlaceholderConfigurer类它是把属性中的定义的变量(var)替代,spring的配置文件中使用${var}的占位符 <beans><bean ...
- spring源码学习(三)--spring循环引用源码学习
在spring中,是支持单实例bean的循环引用(循环依赖)的,循环依赖,简单而言,就是A类中注入了B类,B类中注入了A类,首先贴出我的代码示例 @Component public class Add ...
- 关于Java配置文件properties的学习
在Java早期的开发中,常用*.properties文件存储一些配置信息.其文件中的信息主要是以key=value的方式进行存储,在早期受到广泛的应用.而后随着xml使用的广泛,其位置渐渐被取代,不过 ...
- java 强弱引用
ava中,虽然不需要程序员手动去管理对象的生命周期,但是如果希望某些对象具备一定的生命周期的话(比如内存不足时JVM就会自动回收某些对象从而避免OutOfMemory的错误)就需要用到软引用和弱引用了 ...
- Properties类学习笔记
1.Properties是一个hashTable子类,但它只装String类型的值2.一个Properties集中有一个子Properties集为它的默认属性集,如果在Properties中找不到相关 ...
- iOS应用启动原理图解 及ARC强弱引用
iOS应用启动原理图解(红色箭头表示strong强引用,绿色箭头代表weak若引用) 只要将UI控件拖到Storyboard里控制器的大view上,Xcode会自动将这些控件以强引用的形式加入到sel ...
随机推荐
- isinstance()判断数据类型
判断数据类型isinstance()l=[1,2,3]print(isinstance(l,list))#括号里面第一个填需要判断的数据,第二个是判断条件
- 斯坦福大学CS231n简要笔记和课后作业
笔记目录: 1. CS231n--图像分类(KNN实现) 2. 待更新... 3. 4.
- 深入探讨ui框架
深入探讨前端UI框架 1 前言 先说说这篇文章的由来 最近看riot的源码,发现它很像angular的dirty check,每个component ( tag )都保存一个expressions数组 ...
- JSP/Servlet Web 学习笔记 DayFive
ServletConfig <只对当前Servlet有效> (1)在Web容器初始化Servlet实例时,都会为这个Servlet准备一个唯一的ServletConfig实例(俗称Serv ...
- lombok 去除麻烦的实体类get和set,toString书写
首先在pom.xml中添加 <dependency> <groupId>org.projectlombok</groupId> <artifactId> ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 K: 大整数加法
http://acm.ocrosoft.com/problem.php?cid=1316&pid=10 题目描述 求两个不超过200位的非负整数的和. 输入 有两行,每行是一个不超过200 ...
- Spark on Yarn——spark1.5.1集群配置
写在前面: spark只是一种计算框架,如果要搭建集群要依托与一定的组织模式. 目前来说,Spark集群的组织形式有三种: 1. Standalone:使用akka作为网络IO组件,mast ...
- Crash的游戏 [组合+递推]
题面 思路 问题转化 这个问题的核心在于,我们需要把"加入一个球.拿出一个球"这两个操作转化一下 因为显然两个操作同时进行的话,我们没有办法从单纯的组合意义去分析 我们首先把$m$ ...
- 雅礼集训 Day3 T2 u 解题报告
u 题目背景 \(\frac 14\) 遇到了一道水题,完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了一眼就切掉了这题,嘲讽了\(\frac 14\)一番就离开了. ...
- 洛谷 P2597 [ZJOI2012]灾难 解题报告
P2597 [ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发 ...