Objective-c和java之间的区别 [已关闭]

2022-09-01 21:38:05

我有Java的经验,想学习objective-c为iPhone编写应用程序。有哪些根本区别?(语法除外)


答案 1

从概念上讲,最大的区别是Objective-C是动态类型的,你不调用方法,而是发送消息。这意味着 Objective-C 运行时不关心你的对象是什么类型,只关心它是否会响应你发送的消息。这反过来意味着你可以(例如)创建一个带有 objectForIndex: 方法的类,并用它来代替 NSArray,只要使用它的代码只调用 objectForIndex:

这允许您执行各种时髦的事情,例如将一个对象伪装成另一个类的对象,并且可以在运行时添加方法或在编译时将方法集合(称为类别)添加到预构建的类(如NSString)中。大多数时候,除了类别之外,您永远不会为这些技巧而烦恼。

在更实际的层面上,您会注意到:

  • 语法不同
  • 内存管理更加手动。在iPhone上,您必须使用保留/释放(OS X具有垃圾回收功能)。这实际上并不像听起来那么糟糕。如果您遵循规则,并将实例变量包装在 getter 和 setter 中,您会发现自己很少需要编写 retain 或 release。更新:在我写这篇文章的一段时间后,苹果引入了自动引用计数(ARC)。ARC源于这样一种观察结果,即clang静态分析仪能够发现几乎所有缺失(或额外)的保留或释放。因此,他们通过让编译器自动放入保留和释放来扩展该原则。除了一些关于强关系和弱关系的简单规则(即一个对象是否声称拥有另一个对象)之外,你或多或少可以忘记内存管理。此外,ARC在iOS上可用。
  • 所有方法都是公共的。这是消息发送范例的直接结果,但您无法定义私有或受保护的方法。
  • 图书馆要小得多。特别是,您会注意到只有三个集合类 NSArray、NSDictionary 和 NSSet(以及它们的可变版本)。其理念是你对界面进行编程。运行时担心实现应该是什么。

ETA:我忘了一件重要的事情,你会想念Java。Objective-C 不支持命名空间。这就是为什么你会看到带有两个(或更多)字母前缀的OBjective-C类,这是我真正希望他们添加的功能。


答案 2

首先,Objective-C没有为iPhone提供垃圾回收器。在 Mac 上,存在垃圾回收器。

但是,对我来说,最大的区别可能是每个类有2个文件。一个头文件 (.h),您必须在其中声明实例变量、属性和方法。然后是在其中编写方法的实现 (.m) 文件。Objective-C中的属性必须使用@synthesize关键字“合成”,以创建getter和setter方法。

过渡不是太糟糕。这两种语言在对象模型甚至某些语法方面都遵循类似的规则。我实际上做了相反的过渡。我从iPhone的Objective-C开始,然后拿起Java进行Android开发。

在不相关的说明中,使用Apple的工具构建UI要容易得多。界面构建器非常简单。将 nib 文件中的 UI 对象连接到代码中的声明非常简单。Instruments 提供了一种简单的方法来检查 CPU 使用率、内存泄漏、分配等。另外,就功能,整体打磨和易用性而言,我每天都会将XCode和Apple的工具用于Eclipse。

如果你精通Java,那么迁移到Objective-C就不会太难。只需准备好[]键并练习键入“释放”即可!


推荐