
f703738da9773912bede4ac9f9198618377ae29a.jpg
copy用來修飾對象,而且能使用copy這個屬性的修飾的對象,必須遵守了NSCopying協(xié)議,并實(shí)現(xiàn)了- (id)copyWithZone:(nullable NSZone *)zone方法,默認(rèn)NSString/NSArray/NSDictionary還有他們對應(yīng)可變的類型,都實(shí)現(xiàn)了這個方法,所以我們可以直接使用點(diǎn)屬性來copy或者mutablecopy,這也是為什么其他的對象(如UIView和它的子類等)我們用copy屬性修飾就會崩潰,還會提示我們(
[UIImageView copyWithZone:]: unrecognized selector sent to instance 0x7ff690c1c7c0)對于不可變的對象copy 是地址的復(fù)制/mutablecopy是內(nèi)容的拷貝,會產(chǎn)生一個新的對象!
NSString *string1 = [NSString stringWithFormat:@"好好的"];
NSString *string2 = string1.copy;
NSLog(@"%p-----%p",string1,string2);
// 0x7f829ad27880-----0x7f829ad27880 地址一樣
NSString *string3 = string1.mutableCopy;
NSLog(@"%p",string3);
// 0x7f8798717bf0
strong和weak
1.strong用來修飾對象,表示強(qiáng)引用,修飾的對象引用計(jì)數(shù)+1
2.weak同樣用來修飾對象,表示弱引用,修飾的對象引用計(jì)數(shù)不變,
只有當(dāng)一個對象不再有strong類型的指針指向它的時候,不管有多少個weak指針指向它,它都會被釋放,并且會把所有weak修飾的屬性置nil,weak主要是用來解決循環(huán)引用導(dǎo)致的雙方都釋放不了的問題
assign
assign用來修飾基本數(shù)據(jù)類型(NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等)