1

好吧,我已经开始使用 Head First iPhone Development (O'reilly) 进行 iPod/iPhone 编程,并且我正在从书中输入代码。有两个问题,一个是编程相关的,另一个不是。

  • 我不明白objective-c方法的格式。根据书中的源代码,我现在遇到了一些错误。这使我进入下一个问题。

  • 一些代码是错误的。我是这么认为的,因为我无法在不修改代码的情况下运行代码。这本书的文本中有一些错别字,因为它是第一版等等,但我的“修复”代码可能与它有关吗?

所以......我在哪里可以了解更多关于objective-c方法的信息以及它们在结构方面的工作方式以及返回类型和参数的去向?

对于那些有这本书的人,我一开始就在 InstaTweet 应用程序的中间。

谢谢。

4

6 回答 6

5

也许“类 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 感觉很棒。挂在那里!

于 2010-03-12T09:54:47.103 回答
1

查看 Apple 的Objective C 简介

基本的方法格式是

-(ReturnType *)methodName:(VariableType *)variableName{

}

例如:

-(NSString *)giveMeANewStringFromAnOldString:(NSString *)oldString{

}

您还应该查看本书的网站以获取勘误表。

于 2010-03-12T04:57:26.943 回答
1

Objective-C 方法的定义非常简单。实际上,它与常规的 C 函数调用定义非常相似。最大的补充是命名参数的选项。这是一个例子:

-(int)addX:(int)x toY:(int)y
{
    return x + y;
}

您可以通过向适当的对象发送消息来使用它:

int z = [object addX:x toY:y];

在这种情况下,我给参数和参数赋予了相同的名称,以明确事物的排列方式。你可以很容易地做到:

int z = [object addX:4 toY:7];

在那之后,z将是 11 岁。

于 2010-03-12T04:57:36.747 回答
1

我做了和你一样的事。我也拿起了 Head First iPhone Development 书(涵盖 3.1 SDK)。

我浏览了其中的所有教程,发现只有 1 个错误导致我的应用程序无法运行(我在书中记下了它,但现在找不到了……)。

所以在那之后我意识到我在语法上遇到了完全相同的问题。

我选择了 Stephen G. Kochan 的“Objective-C 2.0 编程”。(简直太棒了。)这本书简洁明了。我什至没有读完这本书的 25%,我所有的问题都得到了解答。

阅读 Objective-C 代码让我花了好几个月的时间,因为我已经习惯了不同的语法,以至于我的大脑花了一点时间来适应 Objective-C 所期望的方式。

我发现,一旦你将自己的大脑包裹在它周围,Objective-C 代码就会变得非常可读。上面的 Carl Norum 示例很好地展示了可读性。

[object addX:4 toY:7];

没有比这更具可读性的了!

还有一些术语有点不同。“消息传递对象”与“调用方法”也让我花了几个星期。

我希望这本书的推荐对你有帮助,它真的帮助了我很多。

于 2010-03-12T09:54:03.843 回答
0

Apple 提供了一些很棒的学习资源:

学习目标-C:入门

Cocoa 编码指南

祝你好运!

于 2010-03-12T04:55:09.710 回答
0

阅读Cocoa(R) Programming for Mac(R) OS X (3rd Edition),它是 Mac 和 Cocoa 的圣经。

我没有遇到任何问题,但请记住 API 一直在向前发展,因此可能会有轻微的更新/更改。但是我没有发现任何可以阻止我完成所有代码示例和练习的东西。

这是要读的书。

于 2010-03-12T05:14:16.983 回答