2012-03-30 6 views
1

メソッドが.hファイルで宣言されているとintelisenseによって検出され、メソッドが.mファイルで使用されているときに警告が発生しません。インタフェースの外側で目的cのメソッドを宣言するには?

メソッドが.mファイルでのみ宣言されている場合、intelisenseは、使用されているメソッドの下に宣言されている場合、それを検出しません。

警告を避けるために、xcodeにフラグがありますが、無効にしないことをお勧めします。

intelisenseによって検出されるように、警告なしで.mで宣言する方法はありますか?

ありがとうございました。

答えて

4

二つの方法:

次のいずれかの.mファイルの先頭にプライベートメソッドを宣言するためにclass extensionを使用します。

@interface Foo() 

- (void)privateMethod; 

@end 

または:含まれているXcodeの4.3.1へのアップグレード最近のclangのバージョン。この新しいバージョンのコンパイラでは、以前に宣言されたメソッドを同じコンパイル単位で呼び出す必要はありません。

クラスエクステンションは、互換性やプライベートプロパティを宣言するのにも有効です。

1

カテゴリを使用して、クラスの追加メソッドを宣言することができます。例えば

、あなたの.mファイルの先頭にこれを追加する:

@interface MyClass (PrivateCategory) 

-(void)foo; 
-(void)bar; 

@end 

は、Xcodeのは MyClassがさらに foobarに応答することをお知らせします。 (PrivateCategory)は、カテゴリ PrivateCategoryで「グループ化」するメソッドを追加することをコンパイラに伝えます。任意の名前を指定することもできますし、全く名前を付けることもできません(ただし、「匿名のカテゴリ」は意味が少し異なります)。それを修正するために

+0

ありがとうございました!しかし、実装ファイルに直接、それは可能ですか? – NemeSys

+1

クラス拡張の導入以来、優先されるべきプライベートな宣言のための専用メカニズムがあります。 –

+1

@NemeSys、はい。宣言は '.m'ファイルに入れることができます。これらの宣言を他のファイルに含めることができるので、通常はグローバル宣言を.hファイルに入れます。 .hファイルで有効なものは.mファイルでも有効です。 – zneak

関連する問題