用函式批量建立物件的低階錯誤

2021-07-10 13:32:40 字數 1658 閱讀 8410

最近專案需要,在乙個頁面上用到很多下拉框(有時間我在整理出來)自己寫了一套。因為想偷懶就用函式批量建立了下拉框,再根據引數設定下拉框的樣式和資料。但是犯了乙個低階錯誤。

先看看實驗:

申明乙個屬性,uiview 也是乙個類。而且我寫的下拉框也是繼承自uiview

實驗一、

實驗一的函式,建立view1,新增到父檢視中。

實驗一呼叫,列印呼叫前和呼叫後的結果。重點看view1 是否被例項化。

控制台列印的結果,如猜想所示,第一次null沒有被例項化,第二次有被例項化。

但是,這個函式只是給乙個物件例項化。這個和直接寫到呼叫那邊沒有任何區別。而且速度更快,因為編譯器直接編譯執行,不用在本類中的函式列表去尋找setview1right 這個函式了。達不到批量建立的要求。

實驗二、(我犯的錯誤)

函式,把申明的屬性作為函式的引數。

呼叫,view1作為引數傳入。呼叫前和呼叫後各列印一次view1

結果:

什麼???  兩次都是空的。不是view1作為引數傳入進去了麼?這個函式到底有沒有執行啊。。。

函式有執行,模擬器中也出現了藍色正方形。這要扯到ios run time特性,用到時再去找。申明屬性時,它只是在你類的屬性列表裡面加了乙個字段,並沒有初始化這個view1屬性。然而函式傳入用類似於c++裡面的形式引數。真正在模擬器中顯示的藍色正方形就是這個行參,並不是view1。所以之後呼叫view1 全是空的改變view1 當然也就沒任何反應。倒是在函式中如果有這麼一句_view1 = view ;則第二次輸出就會輸出例項化的view1。

但是這樣做依舊達不到批量建立物件的要求

實驗三、(批量建立)

函式,建立乙個新view,作為返回值。然後賦值給屬性。

呼叫、就是賦值給屬性

執行結果。呼叫函式之後view1例項化了

這樣就可以批量產生view了 只要不同的引數即可。

其實想想oc還是挺懶的。不用就不去例項化,節省運算和記憶體。還有就是oc指標用的非常靈活,上述中函式傳遞乙個uiview例項的開銷遠遠大於傳遞乙個指標。

關於友員函式的低階錯誤

類的友員函式可以直接訪問該類的所有成員,但它不是成員函式,可以象普通函式一樣在任何地方被呼叫 這樣看上去,友員函式與成員函式的區別就僅僅在於友員函式可以在任何地方被呼叫,於是我寫了下面的 class cdemo void showmsg void cout m a 無法通過編譯,顯示m a沒有定義。...

關於友員函式的低階錯誤

類的友員函式可以直接訪問該類的所有成員,但它不是成員函式,可以象普通函式一樣在任何地方被呼叫 這樣看上去,友員函式與成員函式的區別就僅僅在於友員函式可以在任何地方被呼叫,於是我寫了下面的 class cdemo void showmsg void cout m a 無法通過編譯,顯示m a沒有定義。...

js批量建立物件的方式

我們一般使用字面量的形式var obj 或者建構函式的方式var obj new object 建立物件。但是以上建立方式對於批量建立物件的時候,會產生大量的重複 因此我們可以使用函式來進行模擬,從而產生出可復用的物件建立方式 一 工廠模式 工廠模式的主要工作原理是用函式來封裝建立物件的細節,從而通...