- self.與的區(qū)別:眾所周知在使用self.時(shí),會(huì)調(diào)用屬性的set與get方法;在使用下劃線時(shí)則不會(huì)調(diào)用彤守。因?yàn)樵谑褂胈調(diào)用時(shí)實(shí)則是調(diào)用的類的成員變量,而使用self.時(shí)則是調(diào)用類的屬性哭靖,使用self.可以訪問父類中的的屬性具垫。
- 在學(xué)習(xí)copy屬性與strong屬性的時(shí)候?qū)elf.與_有了更深刻的理解,在此記錄一下试幽,如有錯(cuò)誤歡迎指正筝蚕。
- copy為深拷貝,會(huì)將對象的指針及內(nèi)容一起拷貝出來抡草,說白了就是重新分配一塊內(nèi)存地址饰及,將原來內(nèi)存中存的數(shù)據(jù)復(fù)制一份放到新內(nèi)存中,兩套數(shù)據(jù)互不影響康震;
- strong為淺拷貝燎含,會(huì)將新對象的指針指向原對象的內(nèi)存地址,兩個(gè)對象共享一塊內(nèi)存地址腿短,使用相同數(shù)據(jù)屏箍。
- 為什么將self.與_,還有copy strong屬性放在一起說呢橘忱,下面用代碼說明一下赴魁。
// 屬性聲明
@property(nonatomic, copy)NSString *str_copy_self;
@property(nonatomic, copy)NSString *str_copy_;
@property(nonatomic, strong)NSString *str_strong_self;
@property(nonatomic, strong)NSString *str_strong_;
// 測試方法
NSMutableString *mStr1 = [[NSMutableString alloc] initWithString:@"你好"];
self.str_copy_self = mStr1;
_str_copy_ = mStr1;
self.str_strong_self = mStr1;
_str_strong_ = mStr1;
NSLog(@"\n%p -- %@ 使用copy屬性self.調(diào)用的\n%p -- %@ 使用copy屬性_調(diào)用的\n%p -- %@ 使用strong屬性self.調(diào)用的\n%p -- %@ 使用strong屬性_調(diào)用的", self.str_copy_self, self.str_copy_self, _str_copy_, _str_copy_, self.str_strong_self, self.str_strong_self, _str_strong_, _str_strong_);
[mStr1 appendString:@"嗎"];
NSLog(@"改變值后");
NSLog(@"\n%p -- %@ 使用copy屬性self.調(diào)用的\n%p -- %@ 使用copy屬性_調(diào)用的\n%p -- %@ 使用strong屬性self.調(diào)用的\n%p -- %@ 使用strong屬性_調(diào)用的", self.str_copy_self, self.str_copy_self, _str_copy_, _str_copy_, self.str_strong_self, self.str_strong_self, _str_strong_, _str_strong_);
-
輸出結(jié)果
- 可以看到,當(dāng)屬性copy屬性時(shí)钝诚,需要用self.調(diào)用屬性才會(huì)對對象進(jìn)行深拷貝颖御,其它情況始終是指針指向相同的內(nèi)存地址。
- 在此記錄這次學(xué)習(xí)凝颇,避免以后做項(xiàng)目時(shí)遇到這種莫名其妙的問題而迷茫潘拱。