2011-09-28 70 views
2

我的情況:自動調用目標C類方法

  • 儀表板控制誰註冊裏面的部件和自動生成的視圖。

  • 控件類是要填充的儀表盤,誰採用<widget>協議(需要進行一些非正式的方法),並需要在儀表盤類,以便在儀表板單知道誰希望成爲註冊。

  • 儀表板類有+(void)register:(Class<widget>)w;,簡單地註冊誰願意在一個NSArray

我需要每個插件類,自動調用method.in C++我用來做一個布爾靜態變量,我會的類用該方法初始化。 Language = objective-c

+0

請使用正確的格式。 – vikingosegundo

回答

2

當第一次加載類時,objective-c運行時將調用兩個方法。 +load+initialize。我相信你可以通過從+initialize內撥打[self register]來完成。

+0

'+ initialize'只在類被使用*時被調用,而不是在被加載時被調用。由於該程序很可能在註冊之前不知道該類,所以'+ load'會更合適。 – ughoavgfhw

+0

所以解決方案只是覆蓋該方法? –

+0

這確實取決於寄存器應該做什麼。我發現所描述的整個架構是...壞 –

0

你能做到這一點的方法是與運行時:

  1. 抓住所有已知運行時類的列表。
  2. 迭代列表,並檢查如果類符合你的widget協議
  3. 如果它不符合協議,調用+register:方法或任何

關於步驟#2,你可以」請使用+conformsToProtocol:方法,因爲您要迭代的類中有一個類是NSZombie類,只要調用方法就會觸發異常。因此,您應該使用class_conformsToProtocol()運行時功能。