2011-07-20 14 views
8

私はBest way to define private methods for a class in Objective-Cに従って、クラス拡張でプライベートメソッドを宣言しています。Objective-C:プライベートメソッドを宣言する必要がありますか?

しかし、Xcode 4では、プライベートメソッドの宣言を完全に取り除いて実装するだけで、アプリケーションは警告またはエラーなしでコンパイルされ実行されることに気付きました。

私はクラス拡張でプライベートメソッドを宣言しなければならないのでしょうか?

どうして私たちはメソッドを宣言する必要がありますか? Javaでは、あなたはRubyではなく。

+1

あなたがそれらを宣言しない限り、さてあなたは、オートコンプリートの方法にXcodeのを取得することはできません。 – thelaws

答えて

10

メソッド定義は、メソッドの前に呼び出し元が宣言されている場合にのみ定義する必要があります。一貫性を保つために、私の拡張でプライベートメソッドを定義することをお勧めします。それだけでCのようだ、つまり

- (void)bar { 
    [self foo]; 
} 

- (void)foo { 
} 

-(void)somemethod 
{ 
} 

-(void)callermethod 
{ 
    //No warning because somemethod was implemented already 
    [self somemethod]; 
} 

-(void)callermethod2 
{ 
    //Warning here if somemethod2 is not defined in the header or some extension 
    [self somemethod2]; 
} 

-(void)somemethod2 
{ 
} 
+0

どのカテゴリ? –

+0

ああ、愚かな私。ありがとう:) –

+0

かなりのカテゴリと拡張子は少し異なります。拡張機能では、ivarsを追加することができます。拡張機能で宣言したメソッドを実装しないと、コンパイラは盛り上がります。私は彼らの他の違いがあると確信していますが、これらは私が利用するものです。 –

2

これは、コンパイルと宣言せずに正常に動作します:

- (void)foo { 
} 

- (void)bar { 
    [self foo]; 
} 

しかし、私は最後にチェックが、これは警告を与えます:定義が何らかの使用の前に来る場合、宣言は必要ありません。 Cでは、コンパイラに余分なパスを追加しなくても済むようにする必要があります(関数を見つけるために1つ、実際に解析する1つ)。必要でないときに宣言する必要があるかどうかは、実際に作業しているコードベースのスタイルに依存します。

宣言を必要としない他の言語については、余分なパスを先取りする人もあれば、コンパイル時に引数の数と型や戻り値の型を知る必要のないものもあります関数は実行時に代わりに関数を呼び出すか、強く型付けされた変数を持たないので、 "重要"ではありません)、スキップするだけです。

関連する問題