iOS 屬性知識(shí)之為什么要使用copy特性

copy特性,傳入(賦值)不可變對(duì)象時(shí)是淺拷貝:

例如,當(dāng)name屬性為copy特質(zhì)時(shí),str_1賦值操作時(shí)淺拷貝

test copy

對(duì)象地址沒有變

傳入可變字符串時(shí)是深拷貝:

##用在可變字符串時(shí)是深拷貝:##
//屬性是iOS管理變量數(shù)據(jù)存取的方法
@property (nonatomic, strong) NSString *name;

@property (nonatomic, copy) NSString *meng;

@end

@implementation ViewController

-(void)viewDidLoad {
    [super viewDidLoad];
    [self testCopyAndStrong];
    //[self testString];
}

-(void)testCopyAndStrong {
    
    NSMutableString *str = [[NSMutableString alloc] initWithString:@"meng"];
    
    self.meng = str;
    
    self.name = str;
    
    [str appendString:@"zhiqi"];
    
    
    //實(shí)際上不可變字符串能拼接是因?yàn)樗皇怯迷撟址母北緛砥唇?    NSString *str1 = [str1 stringByAppendingString:@"mmm"];
    
    //&打印指針的地址,沒有&則是打印指針?biāo)赶驅(qū)ο蟮牡刂?    NSLog(@"%p, %p", str, &str);
    
    //strong特性,指針地址不同,但是指針?biāo)赶驅(qū)ο蟮牡刂废嗤?,是淺拷貝(地址拷貝)
    NSLog(@"%p, %p", self.name, &_name);
    
    //copy特性,指針地址不同,指針?biāo)赶虻膶?duì)象的地址也不同,是深拷貝(內(nèi)容拷貝)
    NSLog(@"%p, %p", self.meng, &_meng);
    
    NSLog(@"%@", str);
    //self.name打印出mengzhiqi,可見strong特性只是把指針?biāo)赶驅(qū)ο蟮牡刂房截惲?    NSLog(@"%@", self.name);
    NSLog(@"%@", self.meng);
}

-(void)testString {
    
    NSString *str = @"meng";
    self.meng = str;
    self.name = str;
    
    //&打印指針的地址,沒有&則是打印指針?biāo)赶驅(qū)ο蟮牡刂?    NSLog(@"%p, %p", str, &str);
    
    NSLog(@"%p, %p", self.name, &_name);
    
    NSLog(@"%p, %p", self.meng, &_meng);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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