1 @property
- @property 是 readwrite带膀,assign代咸,atomic
- 在使用 @property 時(shí)氧猬, 編譯器默認(rèn)會(huì)進(jìn)行自動(dòng) synthesize,生成 getter 和 setter脆烟,同時(shí)把 ivar 和屬性綁定起來(lái)
- 使用 @dynamic,顯式表示不希望編譯器生成 getter 和 setter
- protocol 中定義的屬性房待,編譯器不會(huì)自動(dòng) synthesize邢羔,需要手動(dòng)寫
- 當(dāng)重載父類中的屬性時(shí),也必須手動(dòng)寫 synthesize
1.1 copy與strong關(guān)鍵字
- NSString桑孩、NSArray拜鹤、NSDictionary 等等使用copy關(guān)鍵字(block也是使用copy)
2.它們的可變類型:NSMutableString、NSMutableArray流椒、NSMutableDictionary使用strong關(guān)鍵字
對(duì)象拷貝有兩種方式:淺復(fù)制(指針拷貝)深復(fù)制(內(nèi)容拷貝)
集合的深復(fù)制有兩種方法
(1)initWithArray:copyItems: 第二個(gè)參數(shù)設(shè)置為YES即可深復(fù)制
NSDictionary shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];
如果你用這種方法深復(fù)制敏簿,集合里的每個(gè)對(duì)象都會(huì)收到 copyWithZone: 消息。
如果集合里的對(duì)象遵循 NSCopying 協(xié)議,那么對(duì)象就會(huì)被深復(fù)制到新的集合惯裕。
如果對(duì)象沒(méi)有遵循 NSCopying 協(xié)議温数,而嘗試用這種方法進(jìn)行深復(fù)制,會(huì)在運(yùn)行時(shí)出錯(cuò)轻猖。
copyWithZone: 這種拷貝方式只能夠提供一層內(nèi)存拷貝(one-level-deep copy)帆吻,而非真正的深復(fù)制。
(2)將集合進(jìn)行歸檔(archive)咙边,然后解檔(unarchive)
NSArray *trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];
集合類對(duì)象的copy與mutableCopy
NSArray *array = @[@[@"a", @"b"], @[@"c", @"d"];
NSArray *copyArray = [array copy];
NSMutableArray *mCopyArray = [array mutableCopy];
結(jié)果:copyArray和array的地址是一樣的猜煮,而mCopyArray和array的地址是不同的。說(shuō)明copy操作進(jìn)行了指針拷貝败许,mutableCopy進(jìn)行了內(nèi)容拷貝王带。但需要強(qiáng)調(diào)的是:此處的內(nèi)容拷貝,僅僅是拷貝array這個(gè)對(duì)象市殷,array集合內(nèi)部的元素仍然是指針拷貝
NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString:@"a"],@"b",@"c",nil];
NSArray *copyArray = [array copy];
NSMutableArray *mCopyArray = [array mutableCopy];
結(jié)果:copyArray愕撰、mCopyArray和array的內(nèi)存地址都不一樣,說(shuō)明copyArray醋寝、mCopyArray都對(duì)array進(jìn)行了內(nèi)容拷貝
- 淺復(fù)制(shallow copy):在淺復(fù)制操作時(shí)搞挣,對(duì)于被復(fù)制對(duì)象的每一層都是指針復(fù)制。
- 深復(fù)制(one-level-deep copy):在深復(fù)制操作時(shí)音羞,對(duì)于被復(fù)制對(duì)象囱桨,至少有一層是深復(fù)制。
- 完全復(fù)制(real-deep copy):在完全復(fù)制操作時(shí)嗅绰,對(duì)于被復(fù)制對(duì)象的每一層都是對(duì)象復(fù)制舍肠。