iPhoneでセルフクラスメソッドを使用する方法は? (概念的な質問)
-
03-07-2019 - |
質問
ClassName.mにインスタンスメソッドを記述します:
-(void)methodName:(paraType)parameter
{...}
そして
[self methodName:parameter];
を使用して呼び出します。警告がポップアップ表示されますが、コードは引き続き正常に実行されます。
これは、クラスのインスタンスを作成していないためですか?メソッドがまだ正常に実行されるのはなぜですか?そして、警告を防ぐためにselfメソッドを呼び出す正しい方法は何ですか?
解決
さて、警告付きのヘルプを受ける最初のステップは、警告を投稿することです:)
認識されていないメッセージに関するものだと思いますか?その場合、コンパイラは" methodName"の呼び出しを認識しますが、それがオブジェクトに有効かどうかはわかりません。
あなたのコードは次のように見えると思います;
-(void) someFunc
{
...
[self methodName:parameter];
...
}
-(void)methodName:(paraType)parameter
{
...
}
どちらでも可能です;
a)コンパイラが呼び出しで使用される前にそれを見ることができるように、「methodName」関数をファイルの前に配置します。
b)クラスインターフェイスで宣言します。例:
// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end
他のヒント
警告は何ですか?
ヘッダーファイルにメソッドの定義がありますか?
使用する構文は、selfでメソッドを呼び出す適切な方法です。
Objective-Cメソッドは実行時に解決されるため、このメソッドは機能します。表示される警告は、「Object Fooが-methodName:"に応答しない可能性があります」そして、戻り値の型が id
にデフォルト設定されていることを通知します。コンパイラは、呼び出したコードをコンパイルするまでに -methodName:
の宣言または定義を認識していないためです。警告を削除するには、クラスのインターフェイスまたはクラスのカテゴリでメソッドを宣言します。
警告が表示される場合、メソッドシグネチャがインターフェイスにないことが原因である可能性があります。
@interface foo ....
-(void)method;
実装が記述されると、コンパイラがメソッドを初めて見たわけではないため、警告は消えます。これを行わなくても動作しますが、警告メッセージは迷惑です。