iOS屬性語義設定

2021-07-12 07:40:16 字數 1587 閱讀 3023

屬性分為3類:

1.讀寫屬性(writability)包含:readwrite / readonly

2.setter語義(setter semantics)包含:assign / retain / copy arc狀態下retain改為了strong

3.原子性(atomicity)包含:nonatomic

下面具體說明各個屬性的含義

readwrite / readonly:

決定是否生成set訪問器,readwrite是預設屬性,生成getter和setter方法;readonly只生成getter方法,不生成setter方法。

readonly關鍵字代表setter不會被生成, 所以它不可以和 copy/retain/assign組合使用。

assign / retain / copy:

這些屬性用於指定set訪問器的語義,也就是說,這些屬性決定了以何種方式對資料成員賦予新值。

assign:

直接賦值,索引計數不改變,適用於簡單資料型別,例如:nsingeter、cgfloat、int、char等。

retain:

指標的拷貝,使用的是原來的記憶體空間。

物件的索引計數加1。

此屬性只能用於objective-c物件型別,而不能用於core foundation物件。(原因很明顯,retain會增加物件的引用計數,而基本資料型別或者core foundation物件都沒有引用計數)。

copy:

物件的拷貝,新申請一塊記憶體空間,並把原始內容複製到那片空間。

新物件的索引計數為1。

此屬性只對那些實行了nscopying協議的物件型別有效。

很多objective-c中的object最好使用用retain,一些特別的object(例如:string)使用copy。

nonatomic:

非原子性訪問,不加同步,多執行緒併發訪問會提高效能。如果不加此屬性,則預設是兩個訪問方法都為原子型事務訪問。預設值是atomic,為原子操作。

(atomic是objc使用的一種執行緒保護技術,基本上來講,是防止在寫未完成的時候被另外乙個執行緒讀取,造成資料錯誤。而這種機制是耗費系統資源的,所以在iphone這種小型裝置上,如果沒有使用多執行緒間的通訊程式設計,那麼nonatomic是乙個非常好的選擇。)

什麼情況使用 weak 關鍵字,相比 assign 有什麼不同?

1)在arc中,在有可能出現迴圈引用的時候,往往要通過讓其中一端使用weak來解決,比如:delegate**屬性

2)自身已經對它進行一次強引用,沒有必要再強引用一次,此時也會使用weak,自定義iboutlet控制項屬性一般也使用weak;當然,也可以使用strong

不同點:

1)weak 此特質表明該屬性定義了一種「非擁有關係」 (nonowning relationship)。為這種屬性設定新值時,設定方法既不保留新值,也不釋放舊值。此特質同assign類似, 然而在屬性所指的物件遭到摧毀時,屬性值也會清空(nil out)。 而 assign 的「設定方法」只會執行針對「純量型別」 (scalar type,例如 cgfloat 或 nslnteger 等)的簡單賦值操作。

2)assigin 可以用非oc物件,而weak必須用於oc物件

iOS中cell的屬性設定

1.系統預設的顏色設定 1 無色 2 cell.selectionstyle uitableviewcellselectionstylenone 3 藍色,也就是系統預設的顏色 4 cell.selectionstyle uitableviewcellselectionstyleblue 5 灰色6...

iOS之XIB設定邊框顏色屬性

選中xib 中的label 在右邊欄的第三個標籤頁中第三項是 user defined runtime attributes 新增乙個 keypath keypath 值為layer.borderwidth 型別為 nsnumber 值為你想要設定的邊框寬度。如圖 第二個是設定邊框的顏色,為了相容 ...

iOS 屬性的屬性

賦值 class.propertya instancea retain,assign,copy 只影響 instancea的計數,可能增加,可能不變。到這句執行完畢為止,只要instancea是合法的,propertya就是合法的。retain,assign,copy 誰建立了instancea還是...