2009-11-06 94 views
4

可能重複:
Calling Python from Objective-C如何從Objective-C調用PyObjC代碼?

我是一個長期的Python程序員和短時可可程序員。我剛剛開始使用PyObjC,它真的很棒,它是完成任務的容易程度。也就是說,我想嘗試在PyObjC模型中爲我的控制器使用純粹的ObjC。我可能會喜歡讓Python成爲Python,Objective-C成爲Objective-C。無論如何,我覺得值得一試。

不包括我找不出或找到任何有關如何從Objective-C調用Python的方法,只能用相反的方法。有人可以指出我的任何資源嗎? (也許它是在PyObjC網站上,但我只是不知道我在找什麼?)

編輯:我最感興趣的是,在基本層面上,能夠調用Python模塊並獲得一些本地ObjC數據類型返回。

回答

3

有幾種可能的方法。最有吸引力的是使用py2app從你的python代碼編譯一個可加載的包,你可以使用NSBundle來訪問主體類。不幸的是,這個用例並沒有得到py2app開發者的很多關注,並且我在10.5和10.6中發現了一些bug,包括將數據從python傳遞迴Objective-C時相當討厭的內存泄漏。我不會推薦使用py2app。

第二種方法是反轉嵌入。編寫一個Python可可應用程序,並在啓動時從捆綁包加載您的Objective-C代碼(甚至在main())中。如果你已經有了一個大型的Objective-C應用程序,這可能需要一些工作。我唯一的缺點是你不能在你的Objective-C代碼中使用GC,但這對PyObjC來說是一個普遍的限制。

最後,你可以實例在Objective-C代碼Python解釋器來加載Python代碼。這顯然是更多的參與,但如果你已經有一個大的Objective-C代碼庫,你想注入你的Python代碼,那麼可能是最好的選擇。 Xcode中的Python-Cococa應用程序模板中的main.m文件是開始查看此操作的好地方。