2011-09-09 21 views
2

我之前創建了一個ObjC類。我怎樣才能再次刪除它?因爲在稍後的時間點,我想通過另一個版本來重新創建它。PyObjC:如何刪除現有的Objective-C類

現在,如果我只是重新聲明它,我會得到例外X is overriding existing Objective-C class

回答

3

我不知道如何在PyObjC中做到這一點,但Objective-C運行時功能應該是objc_disposeClassPair()。逛了一下搜索,得到的指示,使用這種Objective-C運行功能可能在PyObjC不起作用:

一個PyObjC SVN提交信息,從2008年1月上寫着:Initial attempt of using objc_disposeClassPair. Disabled because this causes an unexpected crash.http://blog.gmane.org/gmane.comp.python.pyobjc.cvs/month=20080101

有問題的代碼仍然是當前PyObjC在行164ff源和類builder.m名字前有有趣的評論:

/* 
    * Call this when the python half of the class could not be created. 
    * 
    * Due to technical restrictions it is not allowed to unbuild a class that 
    * is already registered with the Objective-C runtime. 
    */ 
    int 
    PyObjCClass_UnbuildClass(Class objc_class __attribute__((__unused__))) 
    { 
     PyObjC_Assert(objc_class != nil, -1); 
     PyObjC_Assert(objc_lookUpClass(class_getName(objc_class)) == nil, -1); 

     //objc_disposeClassPair(objc_class); 
     return 0; 
    } 

話雖這麼說,我從來沒有在Objective-C本身用這個,我不知道很多關於PyObjC。希望這可以幫助。

+0

我試着通過ctypes來調用'objc_disposeClassPair',但我也立刻崩潰了。我想知道爲什麼... – Albert

+0

啊,我管理它。我可能會設置ctypes函數的錯誤argtypes。 [這個例子](https://github.com/albertz/chromehacking/blob/master/disposeClass.py)的作品。 – Albert