我之前創建了一個ObjC類。我怎樣才能再次刪除它?因爲在稍後的時間點,我想通過另一個版本來重新創建它。PyObjC:如何刪除現有的Objective-C類
現在,如果我只是重新聲明它,我會得到例外X is overriding existing Objective-C class
。
我之前創建了一個ObjC類。我怎樣才能再次刪除它?因爲在稍後的時間點,我想通過另一個版本來重新創建它。PyObjC:如何刪除現有的Objective-C類
現在,如果我只是重新聲明它,我會得到例外X is overriding existing Objective-C class
。
我不知道如何在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。希望這可以幫助。
我試着通過ctypes來調用'objc_disposeClassPair',但我也立刻崩潰了。我想知道爲什麼... – Albert
啊,我管理它。我可能會設置ctypes函數的錯誤argtypes。 [這個例子](https://github.com/albertz/chromehacking/blob/master/disposeClass.py)的作品。 – Albert