本文共 1446 字,大约阅读时间需要 4 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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); } |
1 2 | 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 |
1 | @property ( nonatomic , copy ) NSString *name; |
1 2 | 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时,都不希望它改变。
转载地址:http://ecsgx.baihongyu.com/