来自 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 中的 new
,alloc
就是当你为你的对象申请内存时,alloc
申请内存,并且 init
调用 init
方法,相当于 Java 类构造函数(顺便说一下,Ruby 执行 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.
这是一个相关的答案,可以帮助您更加熟悉方括号:
关于objective-c - 想学Objective-C 但是语法很乱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3010979/