在Cocoa中總是調用一個方法嗎?許多職業有init
或initWith
,但更糟的是他們可以從筆尖或其他東西加載。我不想在這種情況下刮擦,發現它是如何做到這一點的。我只是想設置一些初始變量和其他的東西,我想一個方法子類,我可以依靠不管它是一個UIView
,UIViewController
或UITableViewCell
等在iOS中是否有始終調用的init方法?
回答
沒有沒有這樣的方法。 init
來自NSObject
所以每個對象都可以使用它,以及子類定義它們自己的初始化方法。例如,UIView
定義爲initWithFrame:
並且此外存在來自協議的初始方法,例如NSCoding
,其定義爲initWithCoder:
。這是Objective-C的動態特性,任何事情都可以隨時擴展。這就是說,有一些模式。幾乎總是需要initWithNibName:bundle:
和UIView
幾乎總是需要initWithFrame:
或initWithCoder:
。我所做的是做一個內部初始化方法,並讓其他人調用它。
- (void)initialize
{
//Do stuff
}
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self)
{
[self initialize];
}
}
- (id)initWithCoder:(NSCoder *)aCoder
{
self = [super initWithCoder:aCoder];
if(self)
{
[self initialize];
}
}
有許多方法可以編寫自定義初始化程序。
- (id)initWithString:(NSString *)string {
if((self == [super init])) {
self.string = string;
}
return self;
}
這就是我如何寫一般化的初始值設定項。例如,上面的那個接受一個字符串。 (如果你不想要,你不必傳遞字符串)。
順便說一句,init是一種方法。根據NSObject的頭文件,init有一個方法實現。
-1這似乎沒有試圖回答這個問題。@napierzaza不問如何編寫自定義的初始化程序,他們正在尋找一個初始化方法,最終由每個對象調用,而不管類如何,以便在初始化時覆蓋它並提供默認實例變量等。 – Stuart 2014-05-13 07:00:12
我不認爲這是一個初始化工具。 – rightaway717 2014-11-24 05:22:30
不是100%確定它始終被調用,但我確信這是一個可行的選項。坦率地說,我不記得我曾經見過這種方法在實踐中使用,我通常回避使用這種方法(我完全不知道爲什麼,可能是因爲它不是最乾淨和最全面的方法來實現此...):
-didMoveToSuperview()
從技術文檔:
告訴那它的父改變了看法。 此方法的默認實現不執行任何操作。只要超級視圖改變,子類就可以覆蓋它以執行其他操作。
- 1. 是否始終調用NSObject init?
- 2. 在servlet的doget()方法中調用init()
- 3. 設計模式,以便在調用靜態方法之前始終調用靜態init方法
- 4. JMockit中是否有方法從模擬方法調用原始方法?
- 5. $ scope是否必須始終用於Angular中的方法定義
- 6. 子類init方法只調用基礎初始化方法
- 7. Android:此方法是否始終可用並存在?
- 8. 調用init方法失敗;嵌套異常是java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter。 <init>
- 9. 始終在iOS
- 10. FindBugs的 - 「close()方法調用上,始終是空值」
- 11. 只要init調用[super init],在Objective C自定義init方法中調用[self init] OK?
- 12. Init方法在片段視圖模型中沒有調用
- 13. 如何在init方法中調用方法?
- 14. 是否有可能只同步Java流中的終端方法調用?
- 15. 有什麼不同的方式調用ViewModel的Init方法
- 16. 是否有任何給struts2動作類的init方法?
- 17. 啓動iOS在初始化時失敗。本地運行在應用init方法
- 18. Vue.js post方法體始終是空的
- 19. 是否有可能在列表視圖中始終啓用fastscroll?
- 20. iOS檢查代理是否存在調用方法
- 21. iOS控制中心是否調用任何UIApplication方法?
- 22. Interface Builder是否使用-init方法初始化視圖控制器?
- 23. 在Java Swing中是否有必要始終擁有一個Container?
- 24. RAD XE2 DataSnap - 調用方法在iOS Objective-C中調用方法
- 25. vue.js中是否有像angularjs中的ng-init那樣的函數或方法?
- 26. 在Objective C中的init和dealloc方法中調用Accessor方法不安全嗎?
- 27. Servlet的服務和init方法被調用,但不是的doGet
- 28. -init方法不會被調用
- 29. 什麼是servlet的init()方法用於?
- 30. $ scope.ons.navigator.pushPage不是在init()方法的工作
我喜歡那個解決方案,所以它至少將它從特定的init方法中移除。我希望有一個通用的初始化,所有的入口都叫我可以使用。沒有這樣的運氣!謝謝。 cocos2d非常容易,因爲所有的init方法總是最終調用init,所以你可以確定你會得到它。這是你真正感激的東西。否則,你犯了錯誤的分配變量或做永遠不會發生的調用,你嘗試和調試...反正,我會停下來,所以我不會開始哭泣。 – napierzaza 2012-08-01 12:02:30
@borrrden抱歉,是不是**初始化**每個班都調用一次? – onmyway133 2013-11-14 03:43:38
@entropy是的,有一種稱爲初始化的方法,每次運行每個類調用一次,但它是一個類方法(而不是實例方法),所以這不會導致任何問題。不過,真的,你可以將它命名爲任何你想要的。我發現在末尾添加類名可防止子類意外覆蓋它。 – borrrden 2013-11-14 03:51:52