iOS对象属性详解

oc对象的一些属性:
retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained
下面来分别讲讲各自的作用和区别:
retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 release 旧值再 retain 新值,所有实现都是这个顺序
复制代码
- (void)setBackView:(UIView *)backView {
if (_backView != backView) {
[_backView release];
_backView = [backView retain];
}
return _backView;
}
复制代码
copy, 拷贝,新开地址,内容拷贝, setter 方法进行 Copy 操作,与 retain 处理流程一样,先旧值 release ,再 Copy 出新的对象, retainCount 为 1 。这是为了减少对上下文的依赖而引入的机制。
(提一点深拷贝shallow copy,浅拷贝deep copy) 
这篇文章比较直观(http://blog.csdn.net/omegayy/article/details/7311839)
官方文档(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html)
copy和mutableCopy调用后表现的行为到底是什么样完成取决于类本身NSCopying和NSMutableCopying协议是如何实现的。
strong, 强引用,计数器加1,和retain一样(对应retain和copy)
weak,弱引用
复制代码
strong 用来修饰强引用的属性;
@property (strong) SomeClass * aObject; 
对应原来的 
@property (retain) SomeClass * aObject; 和 @property (copy) SomeClass * aObject; 
weak 用来修饰弱引用的属性;
@property (weak) SomeClass * aObject; 
对应原来的 
@property (assign) SomeClass * aObject; 
复制代码
__weak, __strong 用来修饰变量,此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。
__strong 是缺省的关键词。
__weak 声明了一个可以自动 nil 化的弱引用。
__unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。
__autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。
strong和weak的区别
(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放  ,即使还有weak型指针指向它。
一旦最后一个strong型指针离去 ,这个对象将被释放,所有剩余的weak型指针都将被清除。
可能有个例子形容是妥当的。
想象我们的对象是一条狗,狗想要跑掉(被释放)。
strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。
weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
assign,用于简单类型,计数器不加,直接赋值,一个指针,一块地址, setter 方法直接赋值,不进行任何 retain 操作,为了解决原类型与环循引用问题
readonly,只读,只生成get方法,没有set方法
readwrite,默认,可读写,set,get方法都会生成
unsafe_unretained,类似weak,所谓的unSafe就是指会容易出现也指针的情况,慎用
setter = xxxx,声明对象的set方法
getter = xxxx, 声明对象的get方法
nonatomic,非原子操作,系统不添加代码,运行速度相对快,但数据操作在多线程情况下相对不安全
atomic,原子操作,编译时会增加很多加锁解锁代码,数据操作在多线程情况下相对安全
* 使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
* 使用copy: 对NSString
* 使用retain: 对其他NSObject和其子类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给定一个由n个数字组成的数组,请检查是否存在重复项

This is a searching problem which can be solved using brute force approach. But here we are going to see use of hash table to solve such searching problems at lower time complexity. 这是一个搜索问题,可以使用蛮力方法解决。 但是在这里,我…

字符串乘一个数_【思维拓展】三位数乘两位数,构造最大积和最小积

前面袁老师给大家讲了一个重要结论,并运用这个结论来解决问题,构造两位数乘两位数最大积和最小积的问题。今天,更进一步,三位数乘两位数中,如何构造最大积和最小的积?【问题引入】用9、8、6、5、4这五个数字…

ios 微信支付

服务器签名版本 官方已经是建议使用服务器签名来接入微信支付,实际上从安全上考虑,确实是每个客户端不应该知道RAS密钥,也不需要每个客户端都写一遍签名的算法。 服务端接入流程文档:https://pay.weixin.qq.com/wiki/doc/api/app.…

Python | 基于参数和返回值的功能分类

There are following types of the functions based on their parameters and return values: 根据函数的参数和返回值,有以下几种类型的函数: Function with no argument and no return value 没有参数也没有返回值的函数 Function with no argument …

macos可以升级到指定版本吗_承装承修承试可以跨级升级吗?

在建筑行业,通常我们所说的承装承修承试,也就是指承装(修、试)电力设施许可证。承装(修、试)电力设施许可证的功能作用相当于建筑资质,企业需要办理许可证后才能承接电力设施的安装、维护、调试等工程项目。承装(修、试)电力设施许可证可以办…

C#对config配置文件的管理

应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是App.Config(ExeName.exe.config)。 配置文件,对于程序本身来说,就是基础和依据,其本质是一个xml文件,对于配置文件的操作,从.NET…

16位的数字高字节和低字节_显示掩盖较低和较高的16位数字半字节| 8086微处理器...

16位的数字高字节和低字节Problem: To show masking of lower and higher nibbles of 16bit number using 8086 Microprocessor. 问题:使用8086微处理器显示对16位数字的较高半字节和较低半字节的屏蔽。 Assumption: 假设: Number is stored at memory…

一个事物两个方面的对比举例_顶管施工也有讲究,两个方面一个个来

顶管施工其实就是我们平时说的不开挖或者非开挖施工啦,其原理是借助于主顶油缸及管道间、中继间等推力,把工具管或掘进机从工作坑内穿过土层一直推进到接收坑内吊起。管道紧随工具管或掘进机后,埋设在两坑之间。为了响应中央的号召&#xff1…

SQLServer中的死锁的介绍

简介 什么是死锁? 我认为,死锁是由于两个对象在拥有一份资源的情况下申请另一份资源,而另一份资源恰好又是这两对象正持有的,导致两对象无法完成操作,且所持资源无法释放。 什么又是阻塞? 阻塞是由于资源不…

c语言位运算符的使用_C语言程序使用位运算符检查给定数字是否为回文

c语言位运算符的使用Problem statement: Write a C program to check whether a number (binary representation) is palindrome or not using bitwise operators. Maximum input is 255.. 问题陈述:编写一个C程序以使用按位运算符检查数字(二进制​​表示形式)是否…

解析取值_圆锥曲线——高中解析几何全归纳

这是一系列文章,我将在接下来了80多天,尽力把理科比较难的大题题型全部归纳一下然后在最后我会告诉做解析几何的窍门,让你的解析几何不再没有头绪,拿到既可做全文干货,不掺水,可以说总结了解析几何中你能遇…

Tomcat版本与Servlet、JSP等版本的支持关系

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/garyxiong/blog/624619

php 随机两位小数数_使用8086微处理器找出两个8位N数数组

php 随机两位小数数Problem statement: 问题陈述: Write a program in 8086 microprocessor to find out the sum of two arrays of 8-bit n numbers, where size “n” is stored at offset 500 and the numbers of first array are stored from offset 501 and t…

人类一败涂地做图教程_绘画步骤_人类一败涂地鼠绘人物步骤与技巧_3DM单机

第一波根据自己喜欢的人物角色选好模型,模型选不好画出来就不像第二步 对模型进行上色 在上色时可选择对某一部位涂色第三步绘制人物服装细节,首先是起个大概的形状 ,ALT镜头拉进,画笔最小化,然后利用底色扣细建议先从…

java向数组中增加新元素_用Java中的新元素替换List的给定索引处的元素

java向数组中增加新元素Given a list of the integers and we have to replace it an element from specified index with a new element in java. 给定一个整数列表,我们必须用Java中的新元素将其替换为指定索引中的一个元素。 To replace an element in the list…

微服务架构会和分布式单体架构高度重合吗

在最近的Microservices Practitioner Summit峰会上,来自Facebook的工程师Ben Christensen就目前正在普遍快速增长的分布式系统与二进制依赖关系的一种反面模式发表了自己的看法。\\Christensen谈到说,共享类库是整个服务运行过程中最需要的部分&#xff…

北京soul_Soul高智商情侣,机器人博士邂逅科技记者,跨越1200公里来相爱

她,是知名媒体的科技记者,平时往返于帝都各大互联网媒体峰会上,朋友圈都是各大互联网公司创始人大佬,用文字记录下互联网江湖的风云变化。他,是魔都top大学的工业机器人博士,像谢尔顿一样充满科学的奇思妙想…

数据库拆分字符串函数_PHP | 不使用库函数将逗号分隔的字符串拆分为数组

数据库拆分字符串函数Given a string with comma delimited, we have to split it into an array. 给定一个以逗号分隔的字符串,我们必须将其拆分为一个数组。 Example: 例: Input: "Google,Bing,Yahoo!,DuckDuckGo"Output:arrar of strings…

arduino 休眠 节能_Arduino低功耗掉电模式看门狗唤醒

最近在做一个低功耗的设备,发射红外来检测前面1米以内左右的地方是否有人,纽扣电池供电,需要持续工作至少两年,因此,要求设备工作电流在ua级别。(1)红外发射接收由于一般的红外发射接收(下图所示)都会比较…

Android-Dialog

Android-AlertView 我的地址:https://github.com/kongqw/Android-AlertView 开源地址:https://github.com/saiwu-bigkoo/Android-AlertView