9

このようにobjective-cメソッドを書くのは正しいですか

-methodA: (NSString *)str // without return type 
{
    return @"test";
}

上記の方法は私にとってはうまくいきます。 と同じ
ですか? 私はsdkを使用しています。-methodA: (NSString *)str-(id)methodA: (NSString *)str
Mac 10.5 os x

4

7 に答える 7

13

「The Objective-C 2.0 Programming Language」からの質問に答えるには:

戻り値または引数の型が明示的に宣言されていない場合、メソッドとメッセージの既定の型 ( id.

So- methodA:(NSString *)strは有効で、 と同じです- (id)methodA:(NSString *)str

ただし、これは確かに通常とは異なるコーディング方法であり、奨励されるべきではありません - 余分な 4 文字を入力してください!

于 2012-09-04T09:49:16.280 に答える
4
- (void) methodA (NSString *)str //always start a methodod name lower case
{
  return;  //If you do not return anything then there is nothing to return. 
}

(id)とは異なり(void)ます。ここで何かを返す必要があります。id任意のタイプのオブジェクトを表します。「無」のみvoidを表します。

于 2012-09-04T09:23:52.110 に答える
3

アプリで -init を変更しました:

-init
{
    ...
    return self;
}

コンパイラは警告を表示しませんでした。-init を変更すると、次のようになります。

-(int)init
{
    ...
    return 0;
}

コンパイラは予想される型について警告を表示するので、 -init と -(id)init は同じメソッドであると言えます。コンパイラがこの構文を渡すことさえ知らず、そのような言語の機能をチェックすることは悪い習慣だからです:)。Objective-C に関する Apple のドキュメントを読んで、それについて何かを見つけようとします。素敵な質問をありがとう:)

編集:

うわー、あなたはここでドキュメントを読むことができます、クラスインターフェースの章。(void)、(NSObject*) などはキャストのみです。引用:「メソッドの戻り値の型は、ある型を別の型にキャストするための標準 C 構文を使用して宣言されます」. そして別の引用:「戻り値またはパラメーターの型が明示的に宣言されていない場合、メソッドとメッセージの既定の型 (id) であると見なされます」。

于 2012-09-04T09:41:18.087 に答える
3

言語仕様が示すように、許可されています

戻り値またはパラメーターの型が明示的に宣言されていない場合は、メソッドとメッセージの既定の型 (.an) と見なされますid

于 2012-09-04T09:49:18.823 に答える
1

コンパイルしても正しくありません。将来の自分を含め、他の開発者の生活が少し難しくなります。

于 2012-09-04T09:29:58.653 に答える
1

コンパイルして期待どおりに動作する場合は、動作します。しかし、私はそれが良い習慣だとは言いません。

私が推測しなければならないとしたら、あなたのメソッドは何も返さないだろうと思っていたでしょう。したがって、「正しい」とはいえ、誤解を招きます。

本当に任意の型のオブジェクトを返したい場合、余分な 4 文字が問題になるでしょうか? 本当に何も返さない場合は、戻り値の型を に設定しますvoid。コンパイラを満足させるのは簡単ですが、すべてではありません。

于 2012-09-04T09:28:19.287 に答える
0

これを行う:

- (void)methodA:(NSString *)str 
{
  //non returning method;
}

- (NSString *)methodA:(NSString *)str 
{
  return str;  //returning method;
}
于 2012-09-04T09:25:50.137 に答える