IOS開發中重寫init方法使用需謹慎

2022-05-06 16:00:10 字數 729 閱讀 9752

經過大神指點,原來這個問題產生的原因是我錯誤的使用了重寫init方法。我重寫的方法如下,原本打算是在初始化的時候就給view乙個標題和背景色:

1

//自定義初始化

2 -(instancetype)init

7return

self;

8 }

但問題恰恰出現在這個重寫的初始化方法中,具體分析如下:

先在首頁中建立乙個搜尋頁面:

1 resulttableviewcontroller *resulttablevc = [[resulttableviewcontroller alloc]init];

這時候就已經出現問題了,因為這時候就會呼叫init方法,如果我不重寫init方法,預設就走viewdidload,這時候就是正確的,但是 由於我的自定義方法中有乙個self.view,這時候其實還沒有view,所以呼叫self.view之後就會先去建立乙個view,這時候就會呼叫到乙個方法:-(void)loadview,而這個方法就是載入view,就相當於這時候已經把我要push的介面先呈現出來了,但是由於我還沒有往過傳資料,所以就會導致搜尋結果列表中什麼都沒有,所以在使用自定義init方法的時候一定要謹慎使用self.view這樣的語句,有時候會導致無法預期的錯誤,而又因為這樣的錯誤對計算機來所不是錯誤,只是程式設計者的邏輯錯誤,所以陷入這樣的bug之後很難pop出來。

作為乙個菜鳥,把自己犯的錯誤記下來,有助於以後不犯或少犯錯誤。

iOS開發init方法解析

自定義的init方法,都必須呼叫父類的init方法。一般情況下為 id init 通常情況下,這種模式可以滿足絕大多數的需求,但是在少量情況下,需要一些特殊處理。1,出於優化的考慮,init方法會釋放已經分配了記憶體的物件,然後建立另乙個新物件並返回之。2,init方法在執行過程中發生了錯誤,所以會...

自定義的init方法和重寫的init方法

自定義乙個init方法 必須以initwith開頭 person p person alloc init person p1 person new 也呼叫了系統的init方法或者是重寫的init方法 與上式等價 import person.h implementation person 重寫init...

iOS中init和initialize的特點

在nsobject.h中有兩個類方法 void load void initalize initialize和load,我們並不需要在這兩個方法的實現中使用super呼叫父類的方法。load不像普通方法一樣遵守繼承規則,當自己的類沒有實現load方法時,不管超類是否實現,自己都不會載入load方法,...