python ylabel 為什麼PyObjC文檔如此糟糕?




python title position (8)

例如, http://developer.apple.com/cocoa/pyobjc.html仍然適用於OS X 10.4 Tiger,而不是10.5 Leopard。這就是蘋果官方的文檔。

官方的PyObjC頁面同樣很糟糕, http: //pyobjc.sourceforge.net/

這是非常糟糕的,它是莫名其妙的。我正在考慮學習Ruby,主要是因為RubyCocoa的東西是更好的文件記錄,有很多體面的教程(例如http://www.rubycocoa.com/ ),因為鞋GUI工具包

即使這個自動翻譯的日語教程比我可以找到的其他文檔更有用。

我想要做的就是用Cocoa GUI創建相當簡單的Python應用程序。
任何人都可以闡明可怕的文檔,或指向我的一些教程,不只是給你巨大的代碼塊,並假設你知道什麼NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) ..?


湯姆說這一切真的。 許多開源項目都有專門的開發人員,很少有人對文檔感興趣。 這並不是因為球門柱可以每天轉換,這意味著文件不僅要創建,而且要保持。


我只想用Cocoa GUI創建相當簡單的Python應用程序。任何人都可以闡明可怕的文檔,或者指向一些不只是給你巨大代碼塊的教程,並且假設你知道什麼是NSThread.detachNewThreadSelector_toTarget_withObject_ (“queryController”,自我,無)呢..?

[...]

基本上我所要做的就是編寫Cocoa應用程序,而不必學習ObjC。

雖然我基本上同意Soeren的回應,但是我還是會更進一步:

如果沒有對Objective C的一些理解,就可以使用Cocoa很長一段時間。Cocoa並不是獨立於Objective C構建的抽象,而是與它明確聯繫在一起的。 你可以在上面引用的代碼行中看到這個:

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

這是編寫Objective C行的Python方式:

[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil];

現在需要注意的是這條線可以用兩種方式來看:(1)作為Objective C的一行,或者(2)作為Cocoa框架的調用。 我們把它看作(1)的語法。 我們認為(2)認識到NSThread是一個可可框架,它提供了一組方便的功能。 在這種情況下,這個特定的Cocoa框架使得我們可以輕鬆地讓對像開始在新線程上做某些事情。

但是,這個框架就是這樣的:這裡的Cocoa框架(NSThread)為我們提供了這個方便的服務,這個框架與框架已經寫入的語言有明確的聯繫。也就是說,NSThread給了我們一個明確提及“選擇器” 。 事實上,選擇器是Objective C工作原理的基礎。

所以有蹭。 可可從根本上說是一個Objective-C的創造,它的創造者已經用Objective C構建了它。 我並沒有聲稱將接口轉換為Cocoa特徵是不可能的,因為它對於其他語言來說更自然。 只要你改變Cocoa框架來停止引用“選擇器”,它就不再是Cocoa框架了。 這是一個翻譯版本。 一旦你開始走下去,我猜測事情變得非常混亂。 當你更新Cocoa的時候,你正試圖跟上蘋果,也許你碰到了可可的某些部分,只是不能很好的翻譯成新的語言。 所以相反,PyObjC這樣的東西選擇直接暴露Cocoa,這種方式具有非常清晰和簡單的相關性。 正如他們在文檔中所說:

為了在Objective-C消息和Python方法之間進行無損和明確的轉換,Python方法名相當於只是用冒號替換下劃線的選擇器。

當然,這有點難看,這意味著你需要了解一些關於Objective-C的知識,但是這是因為如果真的存在,替代方案不一定更好。


缺少PyObjC文檔的主要原因是有一個開發人員(我),而且大多數開發人員並不特別喜歡編寫文檔。 因為PyObjC是我的一個副項目,我傾向於專注於功能和錯誤修正,因為這對我來說更有趣。

改進文檔的最好方法是自願幫助pyobjc-dev郵件列表。

順便說一下:pythonmac-sig郵件列表(請參閱google)是在MacOSX(而不僅僅是PyObjC)上獲得Python幫助的極好資源。



我同意這個教程是有缺陷的,把隨機的,無法解釋的代碼扔在你的眼前。 它引入了諸如autorelease池和用戶默認值之類的概念,而沒有解釋為什麼你需要它們(“內存管理自動釋放池”不是一個解釋)。

那說...

基本上我所要做的就是編寫Cocoa應用程序,而不必學習ObjC。

恐怕暫時來說,您需要掌握ObjC的基本知識,才能從使用Cocoa的語言中受益。 PyObjC,RubyCocoa,Nu和其他人都是最好的,所有這些都是由熟悉ObjC Cocoa的細節的人所開發的。

就目前而言,如果您真正將腳本語言看作是有用的,而不是試圖用腳本語言構建一個完整的應用程序,那麼您將受益最多。 雖然這已經完成(使用LimeChat,我現在正在使用RubyCocoa編寫的應用程序),但這種情況很少,而且可能會持續一段時間。


我對Objective C或Cocoa什麼都不了解(但對Python很多),但是我正在PyObjc中編寫一個相當複雜的應用程序。 我是如何學習的? 我拿起了OSX的可可編程,並使用PyObjC完成了整本書(一個相當快的過程)。 只是忽略了關於內存管理的一切,你幾乎沒事。 唯一需要注意的是,偶爾你必須使用像endSheetMethod這樣的裝飾器(實際上我認為這是我碰到的唯一一個):

@PyObjcTools.AppHelper.endSheetMethod
def alertEnded_code_context_(self, alert, choice, context):
    pass

Tom和Martin的回答肯定是正確的(在任何開源項目中,你會發現大多數貢獻者對開發人員特別感興趣,而不是像文檔這樣的半相關事務),但是我不認為你最後的特定問題適合PyObjC文檔。

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)

NSThread是Cocoa API的一部分,正如在Apple上記錄的那樣 ,包括特定的方法+ detachNewThreadSelector:toTarget:withObject:我會鏈接在那裡,但顯然有解析錯誤)。 CocoaDev wiki 也有一篇文章

我不認為PyObjC試圖編寫Cocoa是一個好主意,除了一些基本的Python例子。 解釋選擇器也可能超出了PyObjC的範圍,因為這些也是Objective-C的特性,而不是PyObjC的特性。


直言不諱:

如果你想成為一個有效的Cocoa程序員,你必須學習Objective-C。 故事結局。

Python或Ruby都不能通過各自的橋樑來替代Objective-C。 您仍然需要了解Objective-C API,NSObject派生類的固有行為以及Cocoa的許多其他細節。

PyObjC和RubyCocoa是從Cocoa應用程序訪問Python或Ruby功能的好方法,包括大部分(如果不是全部)在Python或Ruby中構建Cocoa應用程序。 但是,其中的成功建立在對Cocoa及其構成的Objective-C API的徹底理解之上。