想要学习Objective-C,但语法非常混乱

Sah*_*bov 20 syntax objective-c

来自Java背景我猜这是预料之中的.我真的很想学习Objective-C并开始开发Mac应用程序,但语法只会让我感到害怕.

例如:

-(void) setNumerator: (int) n
{
    numerator = n;
}
Run Code Online (Sandbox Code Playgroud)

什么是破折号,为什么在括号中后面跟着空?我从未在C/C++,Java或C#中的括号中看到过void.为什么我们在(int)n之后没有分号?但我们在这里有它:

-(void) setNumerator: (int) n;
Run Code Online (Sandbox Code Playgroud)

这个alloc,init,release进程有什么用?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];
[myFraction release];
Run Code Online (Sandbox Code Playgroud)

为什么[myFraction release];myFraction = [myFraction release];呢?

最后是什么与@标志和这个实现在Java中的相同之处是什么?

@implementation Fraction

@end
Run Code Online (Sandbox Code Playgroud)

我目前正在阅读Objective C 2.0中的编程,这对于在Java背景中学习这种新语法非常令人沮丧.

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

更新2:感谢伟大的提示"支持 - 多语言".我们可以将这两个语句组合成一个如下:

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];
Run Code Online (Sandbox Code Playgroud)

可以简化为:

myFraction = [[Fraction alloc] init]; 
Run Code Online (Sandbox Code Playgroud)

Osc*_*Ryz 29

什么是破折号,为什么在括号中后面跟着空?

破折号-表示"实例级别"(这是Java中的默认值).当你看到加号时+它意味着类级别(与static在Java中使用相同)

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

为什么我们在(int)n之后没有分号?但我们在这里有它:

-(void) setNumerator: (int) n;
Run Code Online (Sandbox Code Playgroud)

因为这是方法签名,您可以将其视为一个接口:

 interface YourClass {
      void setNumerator(int n );// see? semicolon
 }
Run Code Online (Sandbox Code Playgroud)

同样的情况.

Objective-C在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;
      }
  }
Run Code Online (Sandbox Code Playgroud)

这个alloc,init,release进程有什么用?

myFraction = [Fraction alloc]; 
myFraction = [myFraction init];
[myFraction release];
Run Code Online (Sandbox Code Playgroud)

allo-init是newJava中的等价物,alloc当你为对象alloc请求内存,请求内存和init调用init方法时,等同于Java类构造函数(顺便说一句Ruby 在幕后同样的事情)

没有相当于Java中的发布,因为它是垃圾收集的,在Objective-C中你必须释放你的对象.

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

最后是什么与@标志和这个实现在Java中的相同之处是什么?

 @implementation Fraction

 @end
Run Code Online (Sandbox Code Playgroud)

这是我之前提到的类定义.

我目前正在阅读Objective C 2.0中的编程,这对于在Java背景中学习这种新语法非常令人沮丧.

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

"方括号"的简史是我记得的.


chi*_*uit 6

也许对于Objective-C的wiki页面有一个惊喜.我刚刚做了,找到了你的大部分答案.

http://en.wikipedia.org/wiki/Objective-C

我也是来自java背景,首先看看objectivec看起来不太性感.

它看起来像C++,面对一点点语法.

什么是破折号,为什么在括号中后面跟着空?

减去这里表示实例方法,加号表示类方法

我从未在C/C++,Java或C#中的括号中看到过void.

这是返回类型

为什么我们在(int)n之后没有分号?

如果您不提供方法体,则语法是方法声明 - 而不是实现.

最后是什么与@标志和这个实现在Java中的相同之处是什么?

@implementation Fraction

@end
Run Code Online (Sandbox Code Playgroud)

在java中可能会

public class Fraction {

}
Run Code Online (Sandbox Code Playgroud)