objective-c - 想学Objective-C 但是语法很乱

标签 objective-c syntax

来自 Java 背景,我猜这是意料之中的。我真的很想学习 Objective-C 并开始开发 Mac 应用程序,但语法让我受不了。

例如:

-(void) setNumerator: (int) n
{
    numerator = n;
}

破折号代表什么,为什么后面的圆括号中是 void?我从未在 C/C++、Java 或 C# 中看到括号中有 void。为什么我们在(int) n 后没有分号?但我们这里确实有:

-(void) setNumerator: (int) n;

这个分配、初始化、发布过程是怎么回事?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];
[myFraction release];

为什么是 [myFraction release]; 而不是 myFraction = [myFraction release];

最后,@ 符号是什么?这个实现在 Java 中的等价物是什么?

@implementation Fraction

@end

我正在阅读 Programming in Objective C 2.0对于具有 Java 背景的人来说,学习这种新语法真是令人沮丧。

更新 1:在阅读了所有这些答案并进一步阅读了 Objective C 2.0 中的编程之后,现在一切都开始变得有意义了!

更新 2:感谢“支持多语言”的重要提示。我们可以像这样将这两个语句合并为一个:

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];

可以简化为:

myFraction = [[Fraction alloc] init]; 

最佳答案

What is that dash for and why is followed by void in parenthesis?

破折号 - 表示“实例级别”(这是 Java 中的默认设置)。当您看到加号 + 时,表示类级别(与在 Java 中使用 static 相同)

括号中的 void 是返回类型,见下文。

Why don't we have a semicolon after (int) n? But we do have it here:

-(void) setNumerator: (int) n;

因为这是方法签名,所以您可以将其视为接口(interface):

 interface YourClass {
      void setNumerator(int n );// see? semicolon
 }

同样的情况。

以 C 为根的 Objective-C(实际上这是带有对象的真正 C)需要一个头文件(在 Java 中完全删除),您可以在其中定义您的类将具有的函数/方法。

如果这样的东西存在于 java 中,则等效于:

// YourClass.java.h 

 interface YourClass {
      void setNumerator(int n );
 }
 // YourClass.java.m
 class YourClass {
      void setNumerator( int n ) {
       this.n = n;
      }
  }

And what's with this alloc, init, release process?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];
[myFraction release];

allo-init 相当于 Java 中的 newalloc 就是当你为你的对象申请内存时,alloc 申请内存,并且 init 调用 init 方法,相当于 Java 类构造函数(顺便说一下,R​​uby 执行 same behind scenes)

在 Java 中没有等同于释放的东西,因为它是垃圾收集器,在 Objective-C 中你必须释放你的对象。

顺便说一句,初始化也可以是 myFraction = [[Fraction alloc]init];

And lastly what's with the @ signs and what's this implementation equivalent in Java?

 @implementation Fraction

 @end

这就是我之前提到的类定义。

I am currently reading Programming in Objective C 2.0 and it's just so frustrating learning this new syntax for someone in Java background.

这是一个相关的答案,可以帮助您更加熟悉方括号:

Brief history of the "square brackets" is I remember it.

关于objective-c - 想学Objective-C 但是语法很乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010979/

相关文章:

ios - 解码为 png 时的 Base64 字符串被 Objective-C 截断

matlab - 直接访问例如的返回值xlim?

c++ - 模板中的模板对象

objective-c - Objective-C 头文件中的常量是如何初始化的?

iphone - SplitView 就像 iPhone 上的 Facebook 应用程序

objective-c - 在 iPad 上导出带注释的文档

ruby //现在或零

python - "except"语句与参数相同的异常类两次

c++ - 未定义的 C/C++ 符号作为运算符

objective-c - ARC 支持 myiVar = nil 吗?