1

さて、私は Head First iPhone Development (O'reilly) を使用して iPod/iPhone プログラミングを開始し、本からコードを入力しています。2 つの問題があります。1 つはプログラミング関連で、もう 1 つはそうではありません。

  • Objective-C メソッドの形式がわかりません。本のソースコードに基づいて、現在いくつかのエラーが発生しています。それが私の次の問題につながります。

  • コードの一部にバグがあります。コードを変更せずに実行することができなかったので、そう思います。この本は初版なのでテキストにいくつかのタイプミスがありますが、コードを「修正」したことが関係しているのでしょうか?

では... object-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)はメソッドの戻り型です。次に、議論が来ます。各コロンは、型指定された引数を定義します(この例では、各引数は(int)です)。

これらのメソッドの呼び出しを比較してみましょう。Java:

rect.setBackgroundColor(255, 255, 0);

Obj-c:

[rect setBackgroundColorWithRed:255 green:255 blue:0];

多くの人がobj-cの構文に出くわします-あなたは一人ではありません。うまくいけば、この比較によって物事がより明確になるでしょう。また、Objective-cの言語的な強みを示しています。呼び出し時に、あなたの議論が何であるかは明らかです。コードを読んでいて、Javaメソッドが呼び出されているのを見た場合、引数が赤、青、緑であることは明らかではありません。obj-cでは、個々の色の値を設定していることは非常に明白です。確かに、ほとんどの開発者はsetColorメソッドの3つの引数が何であるかを推測できますが、より複雑なメソッドは混乱を招きます。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

私はあなたがしたのと同じことをしました。私もHeadFirstiPhone Developmentの本を手に入れました(3.1 SDKをカバーしています)。

その中のすべてのチュートリアルを実行したところ、アプリケーションが機能しなくなる原因となったエラーが1つだけ見つかりました(本にメモしましたが、今は見つかりません...)。

それでその後、私はあなたが構文で抱えているのとまったく同じ問題を抱えていることに気づきました。

StephenG.Kochanの「ProgramminginObjective-C2.0」をピックアップしました。(それは単に素晴らしいです。)本は明確で簡潔です。私は本の25%を通り抜けることさえできず、私の質問はすべて答えられました。

Objective-Cのコードを読むと、私は別の構文に慣れているため、Objective-Cが期待する方法に脳が順応するのに少し時間がかかったため、何ヶ月も私を悩ませました。

私が見つけたのは、Objective-Cコードは、脳を包み込むと本当に読みやすくなるということです。上記のCarlNorumの例は、読みやすさの優れたデモンストレーションです。

[object addX:4 toY:7];

それ以上に読みやすくなることはありません!

また、いくつかの用語は少し異なります。「オブジェクトのメッセージング」と「メソッドの呼び出し」の違いも、数週間は私を驚かせました。

本の推薦があなたを助けてくれることを願っています、それは本当に私にたくさん助けてくれました。

于 2010-03-12T09:54:03.843 に答える
1

Apple のIntro to Objective C を確認してください。

基本的なメソッド形式は

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

}

例えば:

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

}

正誤表については、書籍の Web サイトも確認してください。

于 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];

その後、z11になります。

于 2010-03-12T04:57:36.747 に答える
0

Apple からいくつかの優れた学習リソースがあります。

Objective-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 に答える