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 ...
随机推荐
- python tarfile模块打压缩包,arcname的用法
D:\szh\noses文件夹下有子文件夹和文件 with tarfile.open('E:\\szh.tar', "w") as tar: tar.add('D:\\ ...
- redhat 安装python3
一.首先,官网下载python3的所需版本. wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 想下载到那个文件夹下就先进入到 ...
- CSU-2214 Sequence Magic
题目链接 http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=2214 题目 Description 有一个1到N的自然数序列1,2,3, ...
- U-Net卷积神经网络
由于项目需要,用U-NET跑一个程序来对医学影像进行分割(segmentation),因此跑去看了下这篇论文(paper),下面会介绍一下U-Net的框架及要点,如果哪里有写的不对的,或者好的建议,欢 ...
- 在 MongoDB 上模拟事务操作来实现支付
我们的产品叫「学海密探」,属于在线教育行业,产品需要有支付功能,然而支付最蛋疼是什么?有人会说是支付宝和微信等支付接口的接入开发!没错,但支付接口的开发算是比较简单的了,我觉得凡是跟钱有关系的操作最重 ...
- 爬虫:Scrapy11 - Logging
Scrapy 提供了 log 功能.可以通过 scrapy.log 模块使用.当前底层实现使用了 Twisted logging,不过可能在之后会有所变化. log 服务必须通过显式调用 scrapy ...
- 四、vue派发更新
收集的目的就是为了当我们修改数据的时候,可以对相关的依赖派发更新,那么这一节我们来详细分析这个过程. setter 部分的逻辑: /** * Define a reactive property on ...
- Codeforces 922.F Divisibility
F. Divisibility time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- spring in action 学习笔记四:bean的生命周期
bean 的生命周期分为:一个是ApplicationContext的容器的bean的生命周期,另一个是BeanFactory容器的生命周期. 首先介绍一下:ApplicationContext的容器 ...
- Nodejs 基础知识 浅析
1. 模块化 ①常用模块化规范 CommonJS + nodejs AMD(Asynchronous Module Definition) + RequireJS CMD(Common Module ...