也许“类 c”语言和 obj-c 之间的比较会很有用——让我们来看看 Java。想象一个带有 setBackgroundColor 方法的 Rectangle 类。我们假设我们有一个名为 rect 的 Rectangle 实例。
在 Java 中,方法签名可能是
public void setBackgroundColor(int r, int g, int b) { ... }
在 Objective-C 中,参数是方法签名的一部分,所以它可能是
- (void)setBackgroundColorWithRed:(int)r green:(int)g blue:(int)b;
“-”表示它是 Rectangle 类的实例方法。(void) 是方法的返回类型。然后是争论。每个冒号定义一个参数,它是类型化的(在这个例子中每个 arg 都是 (int))。
让我们比较调用这些方法。爪哇:
rect.setBackgroundColor(255, 255, 0);
对象-c:
[rect setBackgroundColorWithRed:255 green:255 blue:0];
很多人偶然发现了 obj-c 的语法——你并不孤单。希望这个比较能让事情变得更清楚。它还体现了objective-c 的语言优势:在调用时,您的论点很清楚。如果我正在阅读代码并看到调用了 Java 方法,那么参数是红色、蓝色和绿色就不会很明显了。在 obj-c 中,很明显我们正在设置单独的颜色值。当然,大多数开发人员都可以猜到 setColor 方法的三个参数是什么,但更复杂的方法会让人感到困惑。这是在 Java 和 Objective-c 中定义的更复杂的方法:
static Dog createDog( String name
, int age
, boolean isNeutered
, String ownerName
);
+ (Dog *)createDogNamed:(NSString *)name
age: (int) age
neutered:(BOOL) isNeutered
owner: (NSString *) owner;
通话时:
Dog.createDog("Fluffy", 2, true, "Moshe");
[Dog createDogNamed:@"Fluffy" age:2 neutered:YES owner:@"Moshe"];
Objective-c 更冗长,但更具可读性。在 Java 示例中,“2”和“true”参数的含义并不十分清楚。Objective-c 几乎读起来像英语。
其他人已经发布了指向更深入指南的链接,但我希望这能让你克服语法上的绊脚石,使链接变得有用。我很乐意回答您提出的更具体的问题。以我的经验,obj-c 新手在语法方面真的很艰难,然后点击s 感觉很棒。挂在那里!