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