深拷貝與淺拷貝
只有實(shí)現(xiàn)了NSCoping協(xié)議的對(duì)象才能進(jìn)行copy,自定義對(duì)象的copy需要實(shí)現(xiàn)NSCopy協(xié)議,具體是深拷貝還是淺拷貝取決于協(xié)議如何實(shí)現(xiàn)
copy得到的類型一定是不可變的;mutableCopy得到的類型一定是可變的
淺拷貝:拷貝過(guò)后內(nèi)存地址(指針)沒(méi)有改變;
深拷貝:拷貝過(guò)后內(nèi)存地址(指針)發(fā)生改變;
不可變的類型進(jìn)行不可變的拷貝是淺拷貝,其他都是深拷貝;只要見(jiàn)到mutable,都是深拷貝(不管是拷貝類型還是拷貝方法);
1)NSString: copy 淺拷貝 , 拷貝過(guò)后為 NSString 不可變;
mutableCopy 深拷貝, 拷貝過(guò)后為 NSMutableString 可變;
2)NSMutableString: copy 深拷貝 , 拷貝過(guò)后為 NSString 不可變;
mutableCopy 深拷貝 , 拷貝過(guò)后為 NSMutableString 可變;
(NSArray, NAMutableArray) (NSDictionary, NSMutableDictionary) NSSet(集合)同上類似
3)copy時(shí)順便會(huì)附帶一個(gè)Strong
4)@autoreleasepool{} 自動(dòng)釋放池; for循環(huán)創(chuàng)建一個(gè)對(duì)象就釋放一個(gè)對(duì)象
5)NSAutoreleasepool *pool = [NSAutoreleasepool alloc] init];
注意:
錯(cuò)誤代碼:@PRoperty ( nonatomic,copy)NSMutableArray * mutableArray;
運(yùn)用該種寫(xiě)法時(shí)必須重寫(xiě)其set放法;
正確寫(xiě)法:@property ( nonatomic,retain)NSMutableArray * mutableArray;
ARC
ARC中[super delloc]方法已不能調(diào)用,但delloc方法依然有效,所以依然可以 [[NSNotificationCenter defaultCenter] removeObser:self];
Strong,Weak
1)Strong為強(qiáng)引用,Strong指針指向的對(duì)象永不釋放,沒(méi)有strong指針指向它時(shí),它會(huì)立即釋放;
2)weak是弱應(yīng)用,當(dāng)其對(duì)象被釋放時(shí)自動(dòng)置為空;沒(méi)有Strong和weak指針修飾的對(duì)象默認(rèn)為_(kāi)_strong;
3)在ARC中@property retain的對(duì)象在編譯是會(huì)自動(dòng)編譯為Strong
4)strong,weak不修飾簡(jiǎn)單類型,簡(jiǎn)單類型用assgin 或 unsafe_unretained
5)在ARC的block中,之前為防止循環(huán)引用用__block,現(xiàn)在用weak;
在ARC環(huán)境下添加非ARC文件:-fno- objc-arc
在非ARC環(huán)境下添加ARC文件:-fobjc-arc
拓展:
轉(zhuǎn)換, 橋接
1).m OC和 C 可以直接混編;
2).m--->.mm OC與C ,C++混編時(shí);
3) .cpp C和C++混編,不與OC混編 ;
4)__bridge_retained OC--->C 轉(zhuǎn)換的時(shí)候會(huì)retain一次;(用于全局的方法,且方法必須是在.h中聲明過(guò)的方法);
5)__bridge_transfer C--->OC 轉(zhuǎn)換的時(shí)候會(huì)release一次;
6)__bridge C<--->OC 相互轉(zhuǎn)換時(shí)引用計(jì)數(shù)不產(chǎn)生任何更改;(用于局部的方法,且方法必須是在.h中聲明過(guò)的方法);
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注