実装で#pragma markを使用してメソッドをグループに整理しています。しかし、メソッド実装コードがこのメソッドを呼び出すコードの下に表示され、「インスタンスメソッドが見つかりません」という警告が表示されることがあります。私がプライベートメソッドを使用しているときに起こります。それを修正するには?プライベートメソッドの前方宣言を作成するには?
答えて
最も簡単な方法は、匿名のカテゴリを使用することです。あなたの@implementation
前に、あなたの.m
ファイルの先頭に次のようなものを追加します。
@interface MyClass()
- (void)myPrivateMethod;
@end
この場合、実装ファイル内のクラス拡張を使用してこれらのメソッドを定義します。このようにして、ヘッダファイルにはあなたの 'public' APIが定義されており、実装ファイルには擬似プライベートメソッドの定義が含まれています。
YourClass.m
@interface MyClass()
- (void)myPrivateMethod;
@end
@implementation MyClass
- (void)myPublicMethod
{
// This will not throw an error or warning
[self myPrivateMethod];
}
- (void)myPrivateMethod
{
// Do something
}
@end
名前付きカテゴリを使用することの欠点は、対応する '@implementation MyClass(PrivateMethods)'が必要なことです。そうでないと警告が表示されます。匿名カテゴリを使用してください。 – DarkDust
プライベートクラス拡張の推奨構文は '@interface MyClass()'です。 –
あなたClass.m実装ファイルでは、あなたが先頭にインタフェース部を追加し、そこにプライベート関数を宣言することができます。
@interface YourClassName (private)
-(void)aPrivateMethod:(NSString*)aParameter;
...
@end
@implementation YourClassName
...
@end
- 1. Ruby - プライベートメソッドのインライン宣言
- 2. 前方宣言
- 3. レシーバータイプは前方宣言
- 4. テンプレートポインタを前方-宣言
- 5. レコードタイプの前方宣言
- 6. 前宣言はC
- 7. Objective-C:プライベートメソッドを宣言する必要がありますか?
- 8. Cで前方宣言を使用するには?
- 9. 前方宣言の副作用を持つtypedef?
- 10. Pythonの前方宣言の内部クラス
- 11. 別のファイルの前方宣言C++
- 12. Cの構造体の前方宣言?
- 13. C++クラスの前方宣言の欠点?
- 14. C++のtypedefの前方宣言
- 15. 財団クラスメッセージ前方宣言エラーです
- 16. テンプレート関数の前方宣言
- 17. クラスの前方宣言、関数
- 18. Objective-Cの前方宣言enum
- 19. boost :: thread変数の前方宣言
- 20. 使用前のC宣言
- 21. 名前空間宣言後に文を使用して宣言する
- 22. `def`は前方宣言のための` declare`です。
- 23. 継承情報で前方に宣言する
- 24. オブジェクトのJTreeとその宣言フィールドをリフレクションで作成する
- 25. Ember.Objectでプライベートメソッド/プロパティを作成するには?
- 26. コンパイルの問題 - typedef、前方宣言、名前空間?
- 27. 前方宣言は変換演算子では動作しません
- 28. sql create文で列名の宣言を分割する方法は?私は、列の宣言にステートメントを作成トリミングされている
- 29. LINQ:IEnumerable [AnonymousType]を宣言する方法は?
- 30. 宣言時にBeanに新しい文字列を作成する目的は?
+1 3つの同様の回答のうち、あなたのものが最も正しいです。 –