strong vs copy
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property(nonatomic,strong) NSString *name;
@end
ViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableString *myName = [NSMutableString stringWithString:@"zhangsan"];
self.name = myName;
NSLog(@"myName's address:%p",myName);
NSLog(@"self.name's address:%p",self.name);
}
2015-07-21 16:38:50.911 Test[4369:2323491] myName's address:0x7967f4c0
2015-07-21 16:38:50.912 Test[4369:2323491] self.name's address:0x7967f4c0
@property(nonatomic,copy) NSString *name;
2015-07-21 16:40:09.938 Test[4394:2330879] myName's address:0x78deb9b0
2015-07-21 16:40:09.938 Test[4394:2330879] self.name's address:0x78dea270
在ARC情况下,如果源字符串是NSString时,由于字符串不可变,所以不管是strong还是copy属性的对象,都是指向源对象,copy只是进行了浅拷贝。
而如果源字符串是NSMutableString的话,strong是强引用,只是增加了源字符串的引用计数,而copy则是对源字符串进行了深拷贝,产生了一个新的对象,而且开辟了新的内存空间。此时如果我们修改源字符串的值,那么strong特性的字符串也会跟着修改,而copy的则不变。
* 大多情况下,建议使用copy,因为一般我们将对象声明为NSString时,都不希望它改变。
strong vs copy的更多相关文章
- Objective-C中的Strong、Copy与MutableCopy
面试过程中经常被问到ARC中Strong.Copy的区别是什么.普通的回答是:一样.文艺(正确)的回答是:分情况(我擦!WQY#$&Y**%OWEUR) 可以先参考这篇文章http://www ...
- iOS之属性修饰符 retain、strong和copy区别测试
时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化 ...
- strong和copy的区别
问题描述 在定义一个类的property时候,为property选择strong还是copy特别注意和研究明白的,如果property是NSString或者NSArray及其子类的时候,最好选择使用c ...
- 关于@property()的那些属性及ARC简介【nonatomic,atomic,assign,retain,strong,weak,copy。】
@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的gette ...
- iOS知识基础篇--@property,@synthesize, nonatomic,atomic,strong,weak,copy,assign,retain详解
一.@property 这个关键词的唯一作用就是声明getter.setter方法接口. 二.@synthesize 实现setter.getter方法,找不到实例变量则主动创建一个. 三.nonat ...
- 深复制与浅复制&&strong,copy修饰符总结
又是一个老生常谈的话题,可是貌似这个问题,好多ios开发工程师并不能理解透彻,所以简单记录分析一下深复制与浅复制的原理以及strong,copy修饰符的原理和使用. 一.深复制与浅复制 ...
- iOS之strong和copy
深拷贝和浅拷贝 深拷贝和浅拷贝主要是对类类型而言的,浅拷贝就是指针拷贝,深拷贝是对象拷贝. property的strong和copy 在接触iOS程序时经常会看到程序某些类类型属性被strong修饰, ...
- iOS 关键词assign、strong、copy、weak、unsafe_unretained
关键词assign.strong.copy.weak.unsafe_unretained 影响: 是否开辟新的内存 是否有引用计数增加 strong 指向并拥有该对象.其修饰的对象引用计数会 +1,该 ...
- 关于strong、copy、weak、assign的常规用法
strong 对于普通的OC对象都是使用strong copy 对于 NSString,Block weak 用于OC对象,1.当出现循环强引用的时候,必须要保证一端是weak, 2 ...
随机推荐
- iOS开发(3):tips提示 | 如何提示一行文字或一个图片
我有一个需求:在点击或长按某个按钮时,显示提示,包括简单的文字提示,还有复杂一点的图片甚至是动态图的提示(可能还要加上文字),怎么实现呢? (1)文字tips 使用之前介绍的qmuikit里面的QMU ...
- Kafka命令清单
一.队列常用命令 #创建topics $ ./kafka-topics.sh --create --zookeeper chenx02:2181 --replication-factor 1 --pa ...
- JavaScript实现iphone时钟
看效果(欢迎各位同学推荐更好的gif制作软件) 请看代码 <!DOCTYPE html> <html lang="en"> <head> < ...
- [TJOI 2018]智力竞赛
Description 题库链接 给出一张 \(m\) 个点的有向图.问可重最小路径覆盖是否 \(\leq n+1\) .若不,求最多用 \(n+1\) 条路径去覆盖,最大化未覆盖点点权最小值. \( ...
- JS截取字符串substr 和 substring方法的区别
substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数 stringvar 必选项.要提取子字符串的字符串文字或 ...
- Ubuntu下redis允许外部链接
原文地址: https://blog.csdn.net/a150827/article/details/51352395 redis在ubuntu安装后默认是只有本地访问,需要别的ip访问我们需要修改 ...
- IDEA从SVN中导入多模块项目
idea多模块项目的导入 在IntelliJ IDEA中间新建一个空项目,名字可以是svn要检索的的项目名称,原则是开心就好: 现在,我们将我们在svn中的多模块的项目down下来 选中顶部的导航中的 ...
- Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡
1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...
- SSM(Spring+SpringMvc+Mybatis)整合笔记
1.使用开发工具 jdk1.8 eclipse Tomcat7.0 MySql 2.创建数据库和表,由于重点是整合,所以数据库就随意加几条数据. 3.创建动态Web项目(推荐使用Maven可以用配置来 ...
- [总结]jQuery之选择器集合
jQuery 的选择器可谓之强大无比,常用的元素查找方法: $("#myELement") //选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是my ...