python有什么缺点_使用Python而不是ObjectiveC有什么缺点?

是的。在

首先,正如您所注意到的,所有文档都是为Objective-C编写的,后者是一种非常不同的语言。在

一个区别是方法名。在Objective-C中,当您向(Python会说“call a method of”)一个对象发送消息时,方法名(选择器)和参数是混合的:NSURL *URL = /*…*/;

NSError *error = nil;

QTMovie *movie = [QTMovie movieWithURL:URL

error:&error];

这在Python中是不可能的。Python的关键字参数不算作方法名的一部分,因此如果您这样做:

^{pr2}$

您将得到一个异常,因为qtmovice类没有名为movieWithURL的方法;Objective-C示例中的消息使用选择器movieWithURL:error:。movieWithURL:和{}将是另外两个选择器。在

他们无法更改这一点,因为Python的关键字参数没有顺序。假设您有一个假设的三参数方法:foo = Foo.foo(fred, bar=bar, baz=baz)

现在,这个调用foo:bar:baz:,对吗?在

别这么快。Foo也可能有一个名为foo:baz:bar:的方法。因为Python的关键字参数不是有序的,所以您实际上可能在调用该方法。同样,如果您试图调用foo:baz:bar:,那么您可能最终会调用foo:bar:baz:。实际上,这种情况不太可能发生,但如果发生这种情况,您将无法可靠地调用这两种方法。在

因此,在PyObjC中,需要像这样调用方法:movie = QTMovie.movieWithURL_error_(URL, ???)

你可能在想什么???。C不允许多个返回值,因此在Objective-C中,error:参数接受指向指针变量的指针,该方法将在该变量中存储一个对象(这称为引用返回)。Python没有指针,所以桥处理此类参数的方式是不传递任何参数,而该方法将(看起来)返回一个元组。所以正确的例子是:movie, error = QTMovie.movieWithURL_error_(URL, None)

您可以看到,即使是一个简单的示例也会偏离Objective-C中的文档

还有其他问题,比如GIL。Cocoa应用程序只会获得更多的并发性,你会希望参与其中,尤其是像NSOperation这样诱人的类。和the GIL is a serious liability, especially on multi-core machines。我是以Python人的身份这样说的(当我不为可可写作时)。正如大卫·比兹利在视频中展示的那样,这是一个冷酷无情的事实;无可否认。在

所以,如果我要从Objective-C转换为我的应用程序,我会选择MacRuby。与PyObjC和rubycooa不同,发送到Cocoa对象的消息不会跨越语言桥;它是Cocoa中从头开始的Ruby实现,带有语言扩展以更好地支持在其中编写Cocoa代码。在

但这太超前了。你才刚刚开始。从Objective-C开始。通过保持语言的一致性,可以更好地避免所使用的语言与编写文档的语言之间的阻抗不匹配。在

另外,如果不了解Objective-C的工作原理,您会发现一些bug(例如发送给已故对象的消息)很难诊断。无论你用哪种语言编写代码,你都将以一个新的Cocoa程序员的身份编写这些bug。在

所以,先学C,再学Objective-C。掌握这两方面的实用知识不应该超过几个星期,到最后,你会为其他一切做好更好的准备。在

我不想详细说明我是如何学习C的;我只想说我不推荐我的学习方法。{我没听说过,我也没读过。我确实有this book,可以确认它是好的,但它也不是特定于Mac的;跳过关于如何编译代码的章节,而是使用Xcode。在

至于Objective-C:The Hillegass book是最流行的,但我没有使用它。(我浏览了一下,看起来不错。)我读了Apple's document on the language,然后马上就开始写一些小的可可应用程序。我读了一些the guides,结果喜忧参半。有a Currency Converter tutorial,但它根本帮不了我,也不能完全反映现代可可应用程序。(现代应用程序仍然使用outlets和action,但也使用绑定,而一个现实的货币转换器将是几乎完全是两个绑定。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值