assign

对基础数据类型 (NSInteger,CGFloat)和C数据类型(int, float, double, char)等 等. 此标记说明设置器直接进⾏行赋值,这也是默认值。在使⽤用垃圾收集的应⽤用程序中,如 果你要⼀一个属性使⽤用assign,且这个类符合NSCopying协 议,你就要明确指出这个标 记,⽽而不是简单地使⽤用默认值,否则的话,你将得到⼀一个编译警告。这再次向编译器说 明你确实需要赋值,即使它是可拷⻉贝的。

retain对其他NSObject和其⼦子类对参数进⾏行release旧值,再retain新值指定retain会在赋 值时唤醒传⼊入值的retain消息。此属性只能⽤用于Objective-C对象类型,⽽而不能⽤用于Core

Foundation对象。(原因很明显,retain会增加对象的引⽤用计数,⽽而基本数据类型或者 Core Foundation对象都没有引⽤用计数——译者注)。

注意: 把对象添加到数组中时,引⽤用计数将增加对象的引⽤用次数+1。

copy

对NSString 它指出,在赋值时使⽤用传⼊入值的⼀一份拷⻉贝。拷⻉贝⼯工作由copy⽅方法执⾏行,此属 性只对那些实⾏行了NSCopying协议的对象类型有效。更深⼊入的讨论,请参考“复制”部 分。
copy与retain:

Copy其实是建⽴立了⼀一个相同的对象,⽽而retain不是:
1.⽐比如⼀一个NSString 对象,地址为0×1111 ,内容为@”STR”,Copy 到另外⼀一个 NSString 之后,地址为0×2222 ,内容相同。
2.新的对象retain为1 ,旧有对象没有变化retain 到另外⼀一个NSString 之后,地址相同 (建⽴立⼀一个指针,指针拷⻉贝),内容当然相同,这个对象的retain值+1。
总结:retain 是指针拷⻉贝,copy 是内容拷⻉贝。
assign与retain:
1. 接触过C,那么假设你⽤用malloc分配了⼀一块内存,并且把它的地址赋值给了指针a, 后来你希望指针b也共享这块内存,于是你⼜又把a赋值给(assign)了b。此时a和b指向 同⼀一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不 知道b是否还在使⽤用这块内存,如果a释放了,那么b在使⽤用这块内存的时候会引起程序 crash掉。
2. 了解到1中assign的问题,那么如何解决?最简单的⼀一个⽅方法就是使⽤用引⽤用计数 (reference counting),还是上⾯面的那个例⼦子,我们给那块内存设⼀一个引⽤用计数,当 内存被分配并且赋值给a时,引⽤用计数是1。当把a赋值给b时引⽤用计数增加到2。这时如 果a不再使⽤用这块内存,它只需要把引⽤用计数减1,表明⾃自⼰己不再拥有这块内存。b不再 使⽤用这块内存时也把引⽤用计数减1。当引⽤用计数变为0的时候,代表该内存不再被任何指 针所引⽤用,系统可以把它直接释放掉。 总结:上⾯面两点其实就是assign和retain的区别,assign就是直接赋值,从⽽而可能引起 1中的问题,当数据为int, float等原⽣生类型时,可以使⽤用assign。retain就如2中所述, 使⽤用了引⽤用计数,retain引起引⽤用计数加1, release引起引⽤用计数减1,当引⽤用计数为0 时,dealloc函数被调⽤用,内存被回收。

assign retain 和copy的区别的更多相关文章

  1. ios retain 与 copy 的区别

    .retain 与copy区别 retain 的仅仅是引用计数加1,但是并没有创建新的对象.它们的指针是指向相同的内存地址. copy 是创建一个新的对象作为原来对象的副本,新创建出来的引用计数并没有 ...

  2. IOS中Retain和Copy的区别

    1 ,可读性: readonly  . readwrite@property(readwrite,....) valueType value;这个属性是变量的默认属性,就是如果你 (readwrite ...

  3. IOS atomic与nonatomic,assign,copy与retain的定义和区别

    IOS atomic与nonatomic,assign,copy与retain的定义和区别 atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作.        ...

  4. retain和copy还有assign的区别

    1. 接触过C,那么假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给 (assign)了b.此时a和b指向同一块内存,请问当a不再需 ...

  5. iOS开发-retain/assign/strong/weak/copy/mutablecopy/autorelease区别

    依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内 ...

  6. 属性readwrite,readonly,assign,retain,copy,nonatomic

    copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议 ...

  7. 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】

    @property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...

  8. iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解

    一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...

  9. object-c中的assign,retain,copy,atomic,nonatomic,readonly,readwrite以及strong,weak

    assign:指定setter方法用简单的赋值,这是默认操作.你可以对标量类型(如int)使用这个属性.你可以想象一个float,它不是一个对象,所以它不能retain.copy.assign指定se ...

随机推荐

  1. thinkphp结合云之讯做短信验证码

    thinkphp结合云之讯做短信验证码先去云之讯注册账号 网址http://www.ucpaas.com/ 注册云之讯平台账号,即可免费获得10元测试费用测试够用啦 解压附件到 ThinkPHP\Li ...

  2. codevs3162抄书问题(划分型dp)

    3162 抄书问题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每 ...

  3. StreamingListener技术点

    以下是对StreamingListene的研究,由于比较简单,故只贴代码,不做解释 /** * Created by gabry.wu on 2016/5/27. * 实现StreamingListe ...

  4. 【BZOJ2595_洛谷4294】[WC2008]游览计划(斯坦纳树_状压DP)

    上个月写的题qwq--突然想写篇博客 题目: 洛谷4294 分析: 斯坦纳树模板题. 简单来说,斯坦纳树问题就是给定一张有边权(或点权)的无向图,要求选若干条边使图中一些选定的点连通(可以经过其他点) ...

  5. PHP富文本编辑器 之Kindeditor的使用 一

    一.下载编辑器源码 KindEditor 4.1.10 (2013-11-23) [1143KB] 下载页面: http://kindeditor.net/down.php 二.部署编辑器 将下载文件 ...

  6. Android webview js 调用java方法报错"Uncaught TypeError: Object [object Object] has no method xx

    webview开发,在Android4.4下js调用java方法报错"Uncaught TypeError: Object [object Object] has no method,同样的 ...

  7. 涨知识 - II

    计算机网络相关 1.在无盘工作站向服务器申请IP地址时,使用的是(     )协议. A.ARP B.RARP C.ICMP D.IGMP 解析: ARP(地址解析协议)是设备通过自己知道的IP地址来 ...

  8. session一致性架构设计实践.

    一.缘起 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文. Web开发中,web-server可以自动为同一个浏览器的访问用户自动创建se ...

  9. 客户端通过base64上传bitmap服务器

    首先致谢:http://www.jb51.net/article/129743.htm 咱们不是代码的生产者,只是代码的搬运工. 场景描述:Android客户端需要上传头像等图片到服务器,经双方协商决 ...

  10. CSS——background综合运用

    搜索栏图标: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> < ...