2011-11-11 10 views
5

実装で#pragma markを使用してメソッドをグループに整理しています。しかし、メソッド実装コードがこのメソッドを呼び出すコードの下に表示され、「インスタンスメソッドが見つかりません」という警告が表示されることがあります。私がプライベートメソッドを使用しているときに起こります。それを修正するには?プライベートメソッドの前方宣言を作成するには?

答えて

8

最も簡単な方法は、匿名のカテゴリを使用することです。あなたの@implementation前に、あなたの.mファイルの先頭に次のようなものを追加します。

@interface MyClass() 
- (void)myPrivateMethod; 
@end 
+0

+1 3つの同様の回答のうち、あなたのものが最も正しいです。 –

1

この場合、実装ファイル内のクラス拡張を使用してこれらのメソッドを定義します。このようにして、ヘッダファイルにはあなたの '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 
+2

名前付きカテゴリを使用することの欠点は、対応する '@implementation MyClass(PrivateMethods)'が必要なことです。そうでないと警告が表示されます。匿名カテゴリを使用してください。 – DarkDust

+0

プライベートクラス拡張の推奨構文は '@interface MyClass()'です。 –

1

あなたClass.m実装ファイルでは、あなたが先頭にインタフェース部を追加し、そこにプライベート関数を宣言することができます。


@interface YourClassName (private) 

-(void)aPrivateMethod:(NSString*)aParameter; 
... 

@end 

@implementation YourClassName 
... 
@end