1.assgin只是簡(jiǎn)單的賦值匣砖,不更改索引計(jì)數(shù)
2.assgin的情況:NSString *newpt = [pt assing]; 此時(shí)newpt和pt完成相同,地址都是OXaaaa,內(nèi)容為OX1111,即newPt知識(shí)pt的別名科吭,對(duì)熱河一個(gè)操作就等于對(duì)另一個(gè)操作昏滴,因此reationCount不需要任何操作
3.assgin直接賦值
4.retain使用了引用計(jì)數(shù),retain引起引用計(jì)數(shù)加1对人,release引用計(jì)數(shù)減1谣殊,當(dāng)引用計(jì)數(shù)為0的時(shí)候,delloc函數(shù)就被調(diào)用规伐,內(nèi)存就會(huì)被回收
5.retain的情況:NSString *newPt = [pt retain];
此時(shí)newPt的地址不再為0Xaaaa蟹倾,可能為0Xaabb 但是內(nèi)容依然為0X1111。 因此newPt 和 pt 都可以管理"abc"所在的內(nèi)存猖闪,因此 retainCount需要增加1 鲜棠;
readOnly:
1.屬性只讀,默認(rèn)的標(biāo)記是讀寫培慌,如果你制定了只讀豁陆,在@inplementation中只需要一個(gè)讀取器,或者如果你使用@synthesize關(guān)鍵字吵护,也是有讀取器方法被解析
readwrite:
1.說明屬性會(huì)被當(dāng)成讀寫的盒音,這也是默認(rèn)屬性。設(shè)置起喝讀取器都需要在@implementation中實(shí)現(xiàn)馅而,如果使用@synthesize關(guān)鍵字祥诽,讀取器和設(shè)置起都會(huì)被解析;
nonatomic:
1.非原子性訪問,對(duì)屬性賦值的時(shí)候不加鎖瓮恭,多線程并發(fā)訪問會(huì)提高性能雄坪。如果不加此屬性,則默認(rèn)是兩個(gè)訪問方法都為原子事務(wù)訪問
weak和strong在property區(qū)別(是強(qiáng)引用和弱引用的區(qū)別)
1.weak和strong屬性只有在你打開ARC時(shí)才會(huì)被要求使用屯蹦,這時(shí)你是不能在retain release autorelease操作的维哈,因?yàn)锳RC會(huì)自動(dòng)為你做好這些操作,但是你需要在對(duì)象屬性使用weak和strong,其中strong就相當(dāng)于retain,而weak相當(dāng)于assign;
2.只有一種情況你需要使用weak(默認(rèn)是strong),就是為了避免retain cycles(就是父類中含有子類(父類reatian了子類)),子類又調(diào)用了父類(子類又reatin了父類),這樣都無法release;
3. 聲明為ARC的指針登澜,指針指向的地址一旦被釋放阔挠,這些指針都被賦值為nil,這樣的好處有效的防治野指針
ARC(Automatic Reference Counting):
1.就是代碼中自動(dòng)加入了retain/release,原先需要手動(dòng)添加的用來處理內(nèi)存管理的引用計(jì)數(shù)的代碼可以自動(dòng)地編譯完成了。該機(jī)能在IOS5.Mac OS X10.7開始導(dǎo)入脑蠕,利用Xcode4.2以后可以使用該特性购撼。
strong,weak,copy具體用法:
1.具體一點(diǎn):IBOutlet可以為weak,NSString為copy,Delegate一般為weak,其他的看情況,一般來說空郊,類“內(nèi)部”的屬性設(shè)置為strong,類外部的屬性設(shè)置為weak,說道理是一個(gè)歸屬權(quán)的問題份招,小心出現(xiàn)循環(huán)引用導(dǎo)致內(nèi)存無法釋放。
2.不用ARC的話就會(huì)看到更多的retain.
3.如果你寫了@synthesize abc = _abc狞甚;的話锁摔,系統(tǒng)自動(dòng)幫你聲明一個(gè)_abc的實(shí)例變量。
? ? 使用assign:對(duì)基礎(chǔ)數(shù)據(jù)類型(NSInteger)和c數(shù)據(jù)類型(int,float,double,char,等)
? ? 使用copy:對(duì)NSString
? ? 使用retain:對(duì)其他NSObjct和其他類