iOS-strong和copy【详细解读】
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【详细解读】的更多相关文章
- iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解
一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...
- iOS之strong和copy
深拷贝和浅拷贝 深拷贝和浅拷贝主要是对类类型而言的,浅拷贝就是指针拷贝,深拷贝是对象拷贝. property的strong和copy 在接触iOS程序时经常会看到程序某些类类型属性被strong修饰, ...
- iOS之属性修饰符 retain、strong和copy区别测试
时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化 ...
- iOS 关键词assign、strong、copy、weak、unsafe_unretained
关键词assign.strong.copy.weak.unsafe_unretained 影响: 是否开辟新的内存 是否有引用计数增加 strong 指向并拥有该对象.其修饰的对象引用计数会 +1,该 ...
- 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
- 深复制与浅复制&&strong,copy修饰符总结
又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用. 一.深复制与浅复制 ...
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- Objective-C中的Strong、Copy与MutableCopy
面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www ...
- strong和copy的区别
问题描述 在定义一个类的property时候,为property选择strong还是copy特别注意和研究明白的,如果property是NSString或者NSArray及其子类的时候,最好选择使用c ...
随机推荐
- struts2(六)之ognl表达式与ActionContext、ValueStack
前言 前面已经把struts2讲内容说了一半了,我写的很详细,希望对博友们有帮助. 一.OGNL表达式语言概述 1.1.OGNL表达式简介 百度上是这样说: OGNL是Object-Graph Nav ...
- vi 方向键和Backspace键失效问题的解决方法
安装的ubuntu默认的编辑器是vi,遇到了两个问题: ① insert模式下,按方向键将产生A.B.C.D等字符,解决方案: :set nocompatible ② insert模式下Backspa ...
- python列表二
比如说要交换两个的顺序,用中间变量temp即可,和java的方法一样 >>> mix[1, '小尹', 5, '小虎', 3.5, [1, 2, 2], '葫芦娃', 0, '1', ...
- Spring的IOC分析(一)
我们学习Spring之前需要对23种java的设计模式的9种有一定的理解,设计模式为了解耦,Spring也是在解耦的方向上设计的,所以设计模式要理解一下,它当中用到了很多. 单例模式(写法很多钟,7种 ...
- 再起航,我的学习笔记之JavaScript设计模式29(节流模式)
节流模式 概念介绍 节流模式(Throttler): 对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能. 优化滚动事件 有的时候我们再为滚动条添加动画的时候,会发现滚动条不停的 ...
- [20160711][neven代码移植Windows]
相关说明 neven代码用于人脸检测,该代码是从Android源代码中抽取出来的,可以在Linux系统下通过make命令直接进行编译,并且可以通过代码中opencv目录下的测试文件进行测试. 移植环境 ...
- 用于浏览器桌面通知的Web API 接口 -notification
notification 接口用于浏览器向用户提供通知内容:常见的如网页版的微信: 1.实现,需要Notifications API 提供的通知接口: 用法: let notification = n ...
- Java Web学习路线图
三张Java Web完整学习路线图,阶段一和JavaSE部分可不学
- Composer 是什么
简单来说,Composer 是一个新的安装包管理工具,服务于 PHP 生态系统.它实际上包含了两个部分:Composer 和 Packagist.下面我们就简单说一下他们各自的用途. Composer ...
- [原创]消灭eclipse中运行启动的错误:“找不到或无法加载主类”问题
最近一直遇到这个问题且根据网上的文章做法基本无法通过,故将自己的解决步骤记录及分享给大家. 一:环境必须要配置好. 试试在dos界面输入:java.javac 分别这两个命令是否能执行,如果都能执行恭 ...