strong和copy是常用到的修饰符,那么什么时候用strong,什么时候用copy,先上一段代码再说(以下代码直接在ViewController中写);

先定义两个数组

///strong
@property (nonatomic,strong) NSArray *arraystrong;
///copy
@property (nonatomic,copy) NSArray *arraycopy;

viewDidLoad方法

- (void)viewDidLoad {
[super viewDidLoad]; NSMutableArray *arrayMut = [NSMutableArray array];
///先添加一个字符串
[arrayMut addObject:@"xiaogui1"];
self.arraystrong = arrayMut;
self.arraycopy = arrayMut;
///再添加一个字符串
[arrayMut addObject:@"xiaogui2"]; ///内容
NSLog(@"arraystrong=%@\narraycopy%@\n",self.arraystrong,self.arraycopy);
///地址
NSLog(@"\n\n内存地址:\n\narrayMut 地址:%p\narraystrong 地址:%p\narraycopy 地址:%p\n",arrayMut,self.arraystrong,self.arraycopy); }

打印结果

再来看下三个数组指向的内存地址:

可以看到arraystrong随着arrayMut的改变而改变了,而arraycopy没有随着arrayMut的改变而改变;原因是因为用strong来修饰时,赋值时并没有创建新的空间,由打印的地址可以看到指向的是同一个指针的内存空间,而用copy时,创建了新的内存空间,没有和arrayMut指向同一个地址; 但是还有一个问题,往 ↓ 看:


当我把self改成下划线_去引用变量时:

- (void)viewDidLoad {
[super viewDidLoad]; NSMutableArray *arrayMut = [NSMutableArray array];
///先添加一个字符串
[arrayMut addObject:@"xiaogui1"];
///把self改成_
_arraystrong = arrayMut;
_arraycopy = arrayMut;
///再添加一个字符串
[arrayMut addObject:@"xiaogui2"]; NSLog(@"arraystrong=%@\narraycopy%@",self.arraystrong,self.arraycopy);
}

打印结果:

这是因为用self引用时,调用了自身的get set方法,也就是因为这样,才实现了strong和copy的不同,而直接用_是没有执行get set 方法的,所以两个数组的值是一样的;所以一般在项目中,全部使用self比较好,个人认为,有误还请指出。

iOS-strong和copy【详细解读】的更多相关文章

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

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

  2. iOS之strong和copy

    深拷贝和浅拷贝 深拷贝和浅拷贝主要是对类类型而言的,浅拷贝就是指针拷贝,深拷贝是对象拷贝. property的strong和copy 在接触iOS程序时经常会看到程序某些类类型属性被strong修饰, ...

  3. iOS之属性修饰符 retain、strong和copy区别测试

    时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化 ...

  4. iOS 关键词assign、strong、copy、weak、unsafe_unretained

    关键词assign.strong.copy.weak.unsafe_unretained 影响: 是否开辟新的内存 是否有引用计数增加 strong 指向并拥有该对象.其修饰的对象引用计数会 +1,该 ...

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

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

  6. 深复制与浅复制&&strong,copy修饰符总结

    又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用.   一.深复制与浅复制      ...

  7. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  8. Objective-C中的Strong、Copy与MutableCopy

    面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www ...

  9. strong和copy的区别

    问题描述 在定义一个类的property时候,为property选择strong还是copy特别注意和研究明白的,如果property是NSString或者NSArray及其子类的时候,最好选择使用c ...

随机推荐

  1. struts2(六)之ognl表达式与ActionContext、ValueStack

    前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助. 一.OGNL表达式语言概述 1.1.OGNL表达式简介 百度上是这样说: OGNL是Object-Graph Nav ...

  2. vi 方向键和Backspace键失效问题的解决方法

    安装的ubuntu默认的编辑器是vi,遇到了两个问题: ① insert模式下,按方向键将产生A.B.C.D等字符,解决方案: :set nocompatible ② insert模式下Backspa ...

  3. python列表二

    比如说要交换两个的顺序,用中间变量temp即可,和java的方法一样 >>> mix[1, '小尹', 5, '小虎', 3.5, [1, 2, 2], '葫芦娃', 0, '1', ...

  4. Spring的IOC分析(一)

    我们学习Spring之前需要对23种java的设计模式的9种有一定的理解,设计模式为了解耦,Spring也是在解耦的方向上设计的,所以设计模式要理解一下,它当中用到了很多. 单例模式(写法很多钟,7种 ...

  5. 再起航,我的学习笔记之JavaScript设计模式29(节流模式)

    节流模式 概念介绍 节流模式(Throttler): 对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能. 优化滚动事件 有的时候我们再为滚动条添加动画的时候,会发现滚动条不停的 ...

  6. [20160711][neven代码移植Windows]

    相关说明 neven代码用于人脸检测,该代码是从Android源代码中抽取出来的,可以在Linux系统下通过make命令直接进行编译,并且可以通过代码中opencv目录下的测试文件进行测试. 移植环境 ...

  7. 用于浏览器桌面通知的Web API 接口 -notification

    notification 接口用于浏览器向用户提供通知内容:常见的如网页版的微信: 1.实现,需要Notifications API 提供的通知接口: 用法: let notification = n ...

  8. Java Web学习路线图

    三张Java Web完整学习路线图,阶段一和JavaSE部分可不学

  9. Composer 是什么

    简单来说,Composer 是一个新的安装包管理工具,服务于 PHP 生态系统.它实际上包含了两个部分:Composer 和 Packagist.下面我们就简单说一下他们各自的用途. Composer ...

  10. [原创]消灭eclipse中运行启动的错误:“找不到或无法加载主类”问题

    最近一直遇到这个问题且根据网上的文章做法基本无法通过,故将自己的解决步骤记录及分享给大家. 一:环境必须要配置好. 试试在dos界面输入:java.javac 分别这两个命令是否能执行,如果都能执行恭 ...