为什么PyObjC文档如此糟糕?

时间:2008-08-18 10:23:22

标签: python macos cocoa pyobjc

例如,http://developer.apple.com/cocoa/pyobjc.html仍然适用于OS X 10.4 Tiger,而不是10.5 Leopard ..而且这是Apple的官方文档..

官方的PyObjC页面同样糟糕,http://pyobjc.sourceforge.net/

这太糟糕了,令人费解......我正在考虑学习Ruby主要是因为RubyCocoa的东西有更好的文档,并且有很多不错的教程(例如http://www.rubycocoa.com/),并且因为Shoes GUI工具包..

即使this badly-auto-translated Japanese tutorial比我能找到的其他文档更有用..

我想做的就是使用Cocoa GUI创建相当简单的Python应用程序。
任何人都可以了解可怕的文档,或者指出一些教程,这些教程不只是给你大量的代码并假设你知道NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None)做了什么......?

9 个答案:

答案 0 :(得分:29)

缺少PyObjC文档的主要原因是有一个开发人员(我),而且大多数开发人员并不特别喜欢编写文档。因为PyObjC对我来说是一个侧面项目,所以我倾向于专注于功能和错误修正,因为这对我来说更有趣。

改进文档的最佳方法是自愿提供有关pyobjc-dev邮件列表的帮助。

顺便说一句:pythonmac-sig邮件列表(请参阅google)是在MacOSX上获取Python帮助的绝佳资源(不仅仅是PyObjC)。

答案 1 :(得分:21)

我同意该教程存在缺陷,在您面前抛出随机,无法解释的代码。它引入了自动释放池和用户默认值等概念,但没有解释为什么你会想要它们(“内存管理的自动释放池”几乎不是解释)。

那说......

  

基本上我想做的就是编写Cocoa应用程序,而不必学习ObjC。

我担心目前, 需要基本掌握ObjC才能从使用Cocoa的任何语言中受益。 PyObjC,RubyCocoa,Nu和其他人都是最好的利基,所有这些都是由熟悉ObjC Cocoa的人来熟悉的人开发的。

现在,如果您真实地看到这些桥接在脚本语言真正发挥作用时非常有用,而不是尝试使用它们构建整个应用程序,那么您将受益最多。虽然这个已经已经完成了(使用LimeChat,我现在正在使用RubyCocoa编写的应用程序),但它很少见,很可能会持续一段时间。

答案 2 :(得分:21)

直言不讳:

如果你想成为一名有效的Cocoa程序员,你必须学习Objective-C。故事结束。

Python或Ruby都不能通过各自的桥梁替代Objective-C。您仍然必须了解Objective-C API,NSObject派生类固有的行为以及Cocoa的许多其他细节。

PyObjC和RubyCocoa是从Cocoa应用程序访问Python或Ruby功能的好方法,包括在Python或Ruby中构建Cocoa应用程序 - 如果不是全部的话 - 。但其中的成功建立在对Cocoa及其组成的Objective-C API的透彻理解之上。

答案 3 :(得分:7)

汤姆和马丁的回答绝对是真的(在任何开源项目中,你会发现大多数贡献者特别感兴趣的是,开发;而不是半关联事项例如文档),但我认为最后你的特定问题不适合PyObjC文档。

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

NSThread是Cocoa API的一部分,因此documented over at Apple包括特定方法+ detachNewThreadSelector:toTarget:withObject:(我会链接到那里,但显然stackoverflow有解析它的错误)。 CocoaDev wiki also has an article

我认为PyObjC尝试记录Cocoa不是一个好主意,除了一些如何在Python中使用它的基本示例。解释选择器也可能超出了PyObjC的范围,因为它们也是Objective-C的一个特性,而不是PyObjC的特征。

答案 4 :(得分:7)

我偶然发现了一个关于PyObjC / Cocoa的好教程:

http://lethain.com/entry/2008/aug/22/an-epic-introduction-to-pyobjc-and-cocoa/

答案 5 :(得分:5)

  

我想做的就是使用Cocoa GUI创建相当简单的Python应用程序..任何人都可以了解可怕的文档,或者指出一些教程不仅仅会给你巨大的代码块并假设你知道什么NSThread.detachNewThreadSelector_toTarget_withObject _(“queryController”,self,None)有..?

     

[...]

     

基本上我想做的就是编写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框架使我们很容易让对象开始在新线程上做某事。

但是踢球者是这样的:这里的Cocoa框架(NSThread)以一种与框架编写的语言明确联系的方式为我们提供这个方便的服务。也就是说,NSThread给了我们一个明确指出的功能“选择”。事实上,选择器是关于Objective C如何工作的基本名称。

所以有了摩擦。 Cocoa从根本上说是一个Objective-C创建,它的创建者在构建它时考虑了Objective C.我并不是说不可能将Cocoa功能的界面翻译成其他语言更自然的形式。只是当你改变Cocoa框架以停止引用“选择器”时,它就不再是Cocoa框架了。这是一个翻译版本。一旦你开始走这条路,我猜测事情变得非常混乱。你正在努力跟上苹果公司,因为他们更新了Cocoa,也许你会碰到Cocoa的某些部分,而这些部分只是不能很好地转换成新语言,无论如何。因此,像PyObjC这样的东西选择直接暴露Cocoa,其方式具有非常清晰和简单的相关性。正如他们在文档中所说:

  

为了在Objective-C消息和Python方法之间进行无损且明确的转换,Python方法名称等效的只是将冒号替换为下划线的选择器。

当然,它有点难看,而且它确实意味着你需要了解一些关于Objective-C的东西,但这是因为如果一个真正存在的替代品不一定更好。

答案 6 :(得分:4)

我对Objective C或Cocoa一无所知(但有很多关于Python的东西),但我现在正在PyObjc中编写一个相当复杂的应用程序。我是如何学习的?我选择了Cocoa Programming for OSX并使用PyObjC完成了整本书(一个非常快速的过程)。只要忽略有关内存管理的任何内容,你就会很好。唯一需要注意的是,偶尔你必须使用像endSheetMethod这样的装饰器(实际上我认为这是我唯一能够击中的装饰器):

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

答案 7 :(得分:3)

这个答案不是很有帮助,但作为开发人员,我讨厌做文档。这是一个开源项目,很难找人做文档。

答案 8 :(得分:3)

汤姆说的都是真的。许多开源项目都有专门的开发人员,很少有人对文档感兴趣。球门柱可以每天转移,这意味着文件不仅必须创建,而且必须维护。