iOS 自定義Set方法,注意點

2021-07-03 15:56:52 字數 953 閱讀 9434

之前一直以為set方法就是為了,讓外部呼叫提供外部介面用的,不過在最近沃爾瑪專案中,我發現我錯了,我錯得特別離譜,以至於不仔細看我都被蒙過去了。

首先我們明確一點set方法,如果我們不自定義set方法,那麼我們屬性會自動實現set和get方法而且注意而且會生成例項變數

like:@property(nonatomic,weak) nsstring *name;

那麼系統會自動生成_name的例項變數。

那如果我們自定義是實現了set方法的話,你就別想用_name了,你不許手動在擴充套件裡面新增乙個_name的例項變數,否則就休想使用,注意不會自動生成了!

所以 我當初遇到這樣一段**

在乙個- (void)setitemslist方法裡面

得到:self.brandlist = brands;

而且我自定義類裡面有自定義實現set方法

- (void)setbrandlist:(nsarray *)brandlist

通過斷點跟蹤,發現當**執行到self

.brandlist

= brands時候

會自動跳入- (

void

)setbrandlist:(

nsarray

*)brandlist方法

而- (

void

)setbrandlist:(

nsarray

*)brandlist這個方法裡面有乙個

_brandlist = brandlist;

注意這個_brandlist就是作者自定義的乙個例項變數。不是系統自己生成的。

所以依次來說總結兩點:

1.自定義set方法之後,沒有辦法使用到例項變數,只能手動新增

2.在我們這個自定義類裡面同樣可以用set方法來對屬性進行邏輯處理,而且可以不給外面使用,單單set方法就給自定義裡面使用。(我這個重寫set的屬性就是沒有給外部使用)

ios 自定義控制項 方法

initwithframe 前面已經見到,程式建立 ui控制項時常常會呼叫該方法執行初始化,因此,如果你需要對 ui控制項執行一些額外的初始化,即可通過重寫該方法來實現。initwithcoder 程式通過在 nib檔案中載入完該控制項後會自動呼叫該方法。因此,如果程式需要在 nib檔案中載入該控制...

set自定義排序

set一般插入元素時,預設使用關鍵字型別的 運算子來比較兩個關鍵字,故一般插入後為公升序,但是針對自定義資料結構,如結構體,沒有 運算子,故無法進行比較。針對自定義資料結構或者說自定義set排序規則有如下幾種方法 在自定義結構體中過載 則可以實現預設排序,示例 如下 include include ...

優先佇列自定義的注意點

自定義優先佇列結構的注意點 1.優先佇列順序和自己定義的是反的,而且預設大根堆 2.需要自己定義順序的時候。1 需要寫出container,一般就是vector 2 寫比較器就是像自己這裡寫的這樣。3.一般如果不是自定義結構的話,而且只需要改為小根堆,使用greater就行 比較器的例子 struc...