NSString類型屬性用copy和strong修飾的區(qū)別

arc中的strong相當(dāng)于mrc的retain,這一點想必大家都知道,那么NSString類型屬性到底應(yīng)該用copy還是stong修飾呢?直接上代碼說明。

@interface Person : NSObject

@property(copy) NSString *copyname;
@property(strong) NSString *strongname;

@end

NSString *name = @"Tom";
NSMutableString *mutableName = [[NSMutableString alloc] initWithString:@"Jim"];

Person *p =[[Person alloc] init];
p.copyname = name;
p.strongname = name;

NSLog(@"%p, %p, %p",p.copyname,p.strongname,name);
//打印結(jié)果:0x100001068, 0x100001068, 0x100001068,結(jié)論:copyname和strongname都是淺拷貝name

p.copyname = mutableName;
p.strongname = mutableName;
NSLog(@"%p, %p, %p",p.copyname,p.strongname,mutableName);
//打印結(jié)果:0x6d694a35, 0x100302140, 0x100302140,結(jié)論:copyname深拷貝mutableName, strongname淺拷貝mutableName

[mutableName appendString:@" Green"];
NSLog(@"%@, %@, %@",p.copyname,p.strongname,mutableName);
//打印結(jié)果:Jim, Jim Green, Jim Green,結(jié)論:copyname未隨mutableName改變而改變,而strongname則發(fā)生了改變

總結(jié): 對于NSString類型屬性而言,如果賦值對象是NSSting,則copy和stong都為淺拷貝,如果賦值對象是NSMutableString,則copy是深拷貝,strong是淺拷貝,所以為了防止賦值對象改變導(dǎo)致屬性發(fā)生改變,我們應(yīng)該用copy修飾NSString類型屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容