Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-c与java的区别_Java_Objective C - Fatal编程技术网

objective-c与java的区别

objective-c与java的区别,java,objective-c,Java,Objective C,我对Java很有经验,想学习objective-c为iPhone编写应用程序。有什么根本区别?(语法除外)谷歌Java vs Objective c 这是一个看起来很不错的… 看看这个链接除了一组完全不同的库[1]之外,会立即影响您的最大区别是Objective-C不提供垃圾收集器。Apple库提供了一些与垃圾收集相关的例程和对象,我相信是使用引用计数的,但是您没有Java中使用的垃圾收集 除此之外,许多事情都是相似的:单一继承、后期绑定等。Objective C不提供方法重载,但这只是一个微不

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

谷歌Java vs Objective c
这是一个看起来很不错的…

看看这个链接

除了一组完全不同的库[1]之外,会立即影响您的最大区别是Objective-C不提供垃圾收集器。Apple库提供了一些与垃圾收集相关的例程和对象,我相信是使用引用计数的,但是您没有Java中使用的垃圾收集

除此之外,许多事情都是相似的:单一继承、后期绑定等。Objective C不提供方法重载,但这只是一个微不足道的区别。Java和Objective-C在对象模型的工作方式上没有太大的区别。Obj。C有一些技巧,比如类别,但是一开始你不需要担心这些


请参阅Remus建议的相关内容以获得更多(更详细)的信息(感谢Remus提醒我库的不同之处-我几乎忘记了这一重要方面)。

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

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

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

另一方面,使用苹果的工具构建用户界面要容易得多。界面生成器非常简单。将nib文件中的UI对象与它们在代码中的声明连接起来非常容易。Instruments提供了一种检查CPU使用情况、内存泄漏、分配等的简单方法。另外,就功能、整体优化和易用性而言,我将随时使用XCode和Apple的工具来Eclipse


如果您精通Java,那么转向Objective-C不会太难。只需准备好[]键并练习键入“release”

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

这使您可以做各种各样的有趣的事情,比如将一个对象摆成不同类的对象,您可以在运行时添加方法,或者在编译时将方法集合(称为类别)添加到预构建类(如NSString)中。大多数情况下,除了类别,你永远不会为这些技巧烦恼

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

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

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

在Objective C中声明的任何对象都是另一个对象的指针

You's java应用程序在任何时候都不会被拒绝,包括因为未发布的原因而被批准后,以及随机主观和有选择地管理之后……或者您是指编程语言吗?:)看一看。不完全是Java vs.Objective-C,但可能仍然有帮助。我太累了,无法正确地使用“您的”vs“您的”…失败:(您好,您说过“•所有方法都是公共的”,我对这句话感到非常困惑,因为我认为您可以在implementation.m文件中定义您的私有方法。只有.h文件中的方法被视为公共类。@TS.xy是的,您可以在implementation文件中声明方法,这将在implementation文件外用编译器警告标记使用,但代码将堆积并将运行。在运行时没有检查“私有”方法的使用。@JeremyP-您可能想更新这篇文章来讨论ARC。我更喜欢IntelliJ而不是Eclipse,它比XCode好得多。我猜AppCode