您喜欢Objective-C的哪些方面以及为什么(特别是与C#比较)? C#在与C,C ++和Objective-C等旧语言相比的过程中失去了一些东西
答案 0 :(得分:11)
我认为最大的好处之一是Obj-C需要的显式内存管理。至少,有一个垃圾收集器,但你必须故意选择加入。我无法告诉你我在C#中遇到了多少线程死锁和内存泄漏,因为我希望GC能为我完成我的工作。它教给我的是在C#中实现几乎所有类的实现IDisposable
。没有任何对象应该假设妈妈会为他打扫房间。
而不是“方法”的概念,“消息传递”对我来说似乎更为现实。您向对象发送消息,告诉它该做什么。它主要是语义,但它可以在你设计类的方式上产生重大影响。
有些人认为obj-c消息的冗长风格是一个缺点,但我个人喜欢它。我可以查看一行代码,并立即知道所有参数的用途,而无需查阅元数据。在类似句子的构造中,它几乎就像Ruby,只是不那么简洁。例如,查看一个类是否是另一个类的子类对陌生人来说是非常容易理解的:
[animal isSubclassOfClass:organism]
此外,这个冗长的语法开始让您真正考虑如何设计您的程序,以最大限度地减少构建的残余数量。我觉得我在Objective-C中的类比C#中的类更小,更有目的性。构建充满方法的巨型超类并不容易。因此,它促进了良好的设计。
当主要用于部署软件的技术存在作业时,存在问题。作为开发人员,我应该能够通过单击按钮来干净地打包,并准备好供我的客户使用。 C#是一场噩梦,虽然其中很大一部分与Windows的构建方式有关而不是OSX,但他们可以从Apple那里学到很多东西。使用XCode进行包装非常简单。它不是一种语言功能,但是当它实际部署您所编写的内容时,它会发挥重要作用。花时间编写好的软件,而不是安装程序。
同样,这不像IDE功能那样真正的语言功能,但应该包含它。 Interface Builder从上到下推广MVC。通过设计,表示逻辑100%与控制器或模型逻辑分离。此外,它很容易使用。
答案 1 :(得分:2)
Objective C是ANSI C的纯超集。因此,您可以移植和重用大量为Linux / Unix编写的C库代码,模拟器,数字库等。
目标C也是不受管理的,因此您可以访问和优化内存中的位到您的内容,这在您尝试最小化每个字节和耗电量处理器周期时非常有用。内存管理也是明确的,它允许一个称职的程序员最小化内存使用而不浪费处理器周期来通过垃圾收集降低效率。基本上,您可以学习如何开发能够在微型便携式设备上提供更好电池寿命的代码。
答案 2 :(得分:0)
如果您知道并喜欢C#,只需为Iphone(http://monotouch.net/)转到Mono。