詳細具體引見請看下文文字解釋吧,本文引見的異常具體。
1 . 可讀性: readonly、readwrite
@property(readwrite,....) valueType value;
這個屬性是變量的默許屬性,就是假如你 (readwrite and readonly 都沒有應用,那末你的變量就是 readwrite屬性 ) ,經由過程參加 readwrite 屬性你的變量就會有 get 和 set 辦法。
property(readonly,...) valueType value;
這個屬性變量就是注解變量只要可讀辦法,也就是說,你只能應用它的 get 辦法。
2 . assign , setter 辦法直接賦值,不停止任何 retain 操作,為懂得決原類型與環循援用成績
3 . retain , setter 辦法對參數停止 release 舊值再 retain 新值,一切完成都是這個次序
4 . copy ,setter 辦法停止 Copy 操作,與 retain 處置流程一樣,先舊值 release ,再 copy 出新的對象,retainCount 為 1 。這是為了削減對高低文的依附而引入的機制。
5 .nonatomic ,非原子性拜訪,不加同步,多線程並發拜訪會進步機能。
留意,假如不加此屬性,則默許是兩個拜訪辦法都為原子型事務拜訪。鎖被加到所屬對象實例級 。 所以不加nonatomic 對與多線程是平安的 。
6 . retain vs. Copy
copy :樹立一個索引計數為 1 的對象,然後釋放舊對象
retain :釋放舊的對象,將舊對象的值付與輸出對象,再進步輸出對象的索引計數為 1
那下面的是甚麼活該的意思呢?
copy 實際上是樹立了一個雷同的對象,而 retain 不是:
好比界說以下屬性:
@property (copy, nonatomic) NSString *testStr;
應用辦法以下:
NSMutableString *str3 =[[NSMutableString alloc ]initWithString:@"Mutable String"
self.testStr = str3;
NSLog(@"%d", [self.testStr retainCount]);
NSLog(@"%d", [str3 retainCount]);
可以看到testStr和str3地址分歧,retainCount都是1
假如把copy改成retain,那末他們指向雷同的地址,retainCount為2.
明確了吧,retain是指針copy,指向統一地址,計數加1,而copy是把內容復制過去。
Objective-C 屬性特征(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
assign:指定setter辦法用簡略的賦值,這是默許操作。你可以對標量類型(如int)應用這個屬性。你可以想象一個float,它不是一個對象,所以它不克不及retain、copy。
retain:指定retain應當在前面的對象上挪用,前一個值發送一條release新聞。你可以想象一個NSString實例,它是一個對象,並且你能夠想要retain它。
copy:指定應當應用對象的正本(深度復制),前一個值發送一條release新聞。根本上像retain,然則沒有增長援用計數,是分派一塊新的內存來放置它。
readonly:將只生成getter辦法而不生成setter辦法(getter辦法沒有get前綴)。
readwrite:默許屬性,將生成不帶額定參數的getter和setter辦法(setter辦法只要一個參數)。
atomic:關於對象的默許屬性,就是setter/getter生成的辦法是一個原子操作。假如有多個線程同時挪用setter的話,不會湧現某一個線程履行setter全體語句之前,另外一個線程開端履行setter的情形,相干於辦法頭尾加了鎖一樣。
nonatomic:不包管setter/getter的原子性,多線程情形下數據能夠會有成績。
以上內容是小編給年夜家引見的IOS開辟之詳談屬性設置readwrite、readonly、retain、copy、assign、nonatomic,願望年夜家愛好。
【iOS開辟之詳談屬性設置readwrite、readonly、retain、copy、assign、nonatomic】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!