#import <UIKit/UIKit.h>@interface ViewController : UIViewController@PRoperty(nonatomic,strong) NSString *name;@endViewController.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:0x7967f4c02015-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:0x78deb9b02015-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時,都不希望它改變。
|
新聞熱點
疑難解答