2009-03-03 14 views
-2

私はClassName.mでインスタンスメソッド書き込み:iPhoneでセルフクラスメソッドを使用するには? (概念的な質問)

-(void)methodName:(paraType)parameter 
{...}

を、警告がポップアップ表示されますが、コードはまだ正常に実行され

[self methodName:parameter];
を使用してそれを呼び出します。

これはクラスのインスタンスを作成していないためですか?なぜメソッドはまだ正常に動作していますか?そして、警告を防ぐために自己メソッドを呼び出す正しい方法は何ですか?

答えて

5

まあ警告して助けを受けるための最初のステップは、警告を投稿するだろう:)

私はそれが認識されないメッセージについて何かあると仮定していますか?もしそうなら、コンパイラは "methodName"への呼び出しを見ますが、それがオブジェクトに対して有効かどうかはわかりません。

あなたのコードは次のようになります。

-(void) someFunc 
{ 
    ... 
    [self methodName:parameter]; 
    ... 
} 

-(void)methodName:(paraType)parameter 
{ 
... 
} 

どちらでもかまいません。

a) 'methodName'関数をファイルの先頭に置き、コールで使用する前にコンパイラが認識できるようにします。

b)クラスインタフェースで宣言します。例えば。

// Foo.h 
@interface Foo { 
... 
} 
-(void) methodName:(paraType)parameter; 
@end 
1

警告は何ですか?

ヘッダーファイルにメソッドの定義がありますか?

使用する構文は、自己のメソッドを呼び出す方法です。

+0

問題は基本的かもしれませんが、これは私にとっては大変なことです。私はヘッドファイルにメソッドを定義することを本当に忘れてしまいます。確かにありがとう。 –

1

Objective-Cメソッドが実行時に解決されるため、このメソッドが機能します。私はあなたが得る警告が "Object Fooは-methodNameに応答しないかもしれない"のようなものであると期待しています。そして、戻り値の型をidにデフォルト設定していることを伝えます。これは、コンパイラが呼び出すコードをコンパイルするまでに、-methodName:の宣言または定義を見たことがないためです。警告を削除するには、クラスのインタフェースまたはクラスのカテゴリのいずれかでメソッドを宣言します。

1

警告が表示されるのは、メソッドシグネチャがインターフェイスにないためです。

@interface foo .... 

-(void)method; 

実装が書き込まれたら、コンパイラがこのメソッドを初めて見たわけではないので、警告は消えるはずです。これをしなくても動作しますが、警告メッセージは迷惑です。

関連する問題