iOS property引數分析

2022-08-29 21:09:31 字數 2200 閱讀 3758

因為現在xcode都是預設使用arc所以現在分析主要是以arc為主。

第一組:

記憶體管理特性

retain  assign  copy  strong    weak     unsafe_unretained     autoreleasing

第二組:

讀 /寫特性

readwrite  readonly

第三組:

多執行緒特性

nonatomic  atomic

第四組:

方法名特性

setter  getter

第一組(retain  assign  copy   strong    weak     unsafe_unretained     autoreleasing)用於:set方法記憶體管理

assign(預設引數):setter方法直接賦值,不進行任何retain操作,不改變引用計數。該方法只會針對「純量型別」(cgfloat或nsinteger等)和c資料型別(int, float, double, char, 等等)的簡單賦值操作,id型別也要用assign,所以一般ios中的**delegate屬性都會用assign來標示。

retain:生成符合記憶體管理的set方法(release舊值,retain新值),適用於oc物件的成員變數。

copy:生成符合記憶體管理的set方法(release舊值,copy新值),適用於nsstring、nsarray等不可變物件。和strong類似,不過該屬性會被複製乙個新的副本。很多時使用copy是為了方式mutable(可變型別)在我們不知道的情況下修改了屬性值,而用copy可以生成乙個不可變的副本防止被修改。如果我們自己實現setter方法的話,需要手動copy。 

strong:強引用,其存亡直接決定了所指向物件的存亡。使用該特性例項變數在賦值時,會釋放舊值同時設定新值,對物件產生乙個強引用,即引用計數+1。如果不存在指向乙個物件的引用,並且此物件不再顯示在列表中,則此物件會被從記憶體中釋放。

weak:弱引用,不決定物件的存亡。屬性表明了一種」非擁有關係「,既不釋放舊值,也不保留新值,即引用計數不變,當指向的物件被釋放時,該屬性自動被設定為nil。即使乙個物件被持有無數個弱引用,只要沒有強引用指向它,那麼還是會被清除。

unsafe_unretained:和weak一樣,唯一的區別就是當物件被釋放後,該屬性不會被設定為nil。所以是unsafe的,詳情請檢視:浪天涯的部落格

注意:weak與strong一般在開啟arc機制下使用

strong:強引用,決定了物件的存亡(乙個物件如果沒有強指標指向(引用計數器為0)時,物件將被銷毀,釋放記憶體),其指向乙個物件,相當於該物件做了一次retain操作。

非arc的retain,相當於arc的strong,弱引用相當於assign

使用copy引數與使用retain引數產生的set方法一致(將生成set方法中的retain改為copy即可)

第二組(readwrite  readonly)用於:是否要生成set方法

readwrite(預設引數):同時生成set、get方法的宣告與實現

readonly:只生成get方法的宣告與實現(不生成set的方法的宣告與實現)

第三組(nonatomic  atomic)用於:多執行緒管理

atomic:(原子性操作)就是乙個操作執行過程不能被中斷,要不就執行完,要不就不執行(乙個操作不可以被中途cpu暫停然後排程)。如果乙個操作是原子性的,那麼在多執行緒環境下,就不會出現變數被修改等奇怪的問題(保證資料同步)。原子操作就是不可再分的操作,在多執行緒程式中原子操作是乙個非常重要的概念,它常常用來實現一些同步機制,同時也是一些常見的多執行緒bug的源頭。

nonatomic:(非原子性操作)操作是直接從記憶體中取數值(不考慮其是否被占用),因為它是從記憶體中取得資料,它並沒有乙個加鎖的保護來用於cpu中的暫存器計算value,它只是單純的從記憶體位址中,當前的記憶體儲存的資料結果來進行使用。在多執行緒環境下可提高效能,但無法保證資料同步。

第四組(setter  getter)用於:set、get方法重新命名(常用於bool型別的成員變數的get方法,bool方法常以is開頭(set方法很少用))

setter:給成員變數的set方法重新命名,set方法預設命名:- (void) set成員變數名(成員變數名首字母大寫):(成員變數資料型別)成員變數名

getter:給成員變數的set方法重新命名,get方法預設命名:- (成員變數資料型別) 成員變數名

IOS property 引數分類

property 引數分為4類 property 引數分為4類 1.與set方法記憶體管理相關引數 retain 要生成符合記憶體管理原則的set方法 應用與物件型別 assign 直接賦值,物件型別,基本資料型別 copy 後面講解 2.多執行緒相關 nonatomic 不生成多執行緒線管 使用這...

IOS property引數詳解

例子 nsstring house nsstring alloc initwithstring 尼瑪的房子 以上 會產生 2 在棧上分配一段記憶體來儲存house。位址為 0xaaaa,內容為0x1111 1 assign nsstring myhouse house assign 此時myhous...

SFDR 引數分析

sfdr是訊號系統處理中常用的一項引數,對於評估系統的雜訊水平和adc dac的效能有一定參考意義。sfdr,英文全稱是 spurious free dynamic range,意為無雜散動態範圍。sfdr是指基波強度與最大雜波或諧波的強度之比,所以sfdr值越大則說明系統的雜訊水平越低,靈敏度越高...