Objective-Cでクラスのプライベートメソッドを定義する最良の方法に従って、クラス拡張でプライベートメソッドを宣言してきました。
しかし、Xcode 4では、プライベートメソッドの宣言を完全に省略して実装するだけで、アプリは警告やエラーなしでコンパイルおよび実行されることに気付きました。
それで、クラス拡張でプライベートメソッドを宣言することさえわざわざする必要がありますか?
とにかくメソッドを宣言する必要があるのはなぜですか?Javaでは、あなたはそうしません...Rubyでも。
Objective-Cでクラスのプライベートメソッドを定義する最良の方法に従って、クラス拡張でプライベートメソッドを宣言してきました。
しかし、Xcode 4では、プライベートメソッドの宣言を完全に省略して実装するだけで、アプリは警告やエラーなしでコンパイルおよび実行されることに気付きました。
それで、クラス拡張でプライベートメソッドを宣言することさえわざわざする必要がありますか?
とにかくメソッドを宣言する必要があるのはなぜですか?Javaでは、あなたはそうしません...Rubyでも。
メソッド定義は、呼び出し元がメソッドの前に宣言されている場合にのみ定義する必要があります。一貫性を保つために、拡張機能でプライベートメソッドを定義することをお勧めします。
-(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
{
}
この回答は、v4.3より前のXcodeのJoeによってすでに正しく回答されています。ただし、v4.3以降では、プライベートメソッドを宣言する必要がないだけでなく、宣言の順序も重要ではなくなりました。詳細については、以下を参照してください。
Objective-Cのプライベートメソッド、Xcode 4.3では、実装ファイルでそれらを宣言する必要がなくなりましたか?
これは、宣言なしでコンパイルされ、正常に実行されます。
- (void)foo {
}
- (void)bar {
[self foo];
}
しかし、最後に確認したところ、これにより警告が表示されます。
- (void)bar {
[self foo];
}
- (void)foo {
}
つまり、Cの場合と同じです。定義が使用される前であれば、宣言は必要ありません。Cは、コンパイラーに余分なパスを追加する必要をなくすためにこれを必要とします(1つは関数を検索し、もう1つは実際にそれらを解析します)。必要のないときに宣言する必要があるかどうかについては、実際には、使用しているコードベースのスタイルに依存します。
宣言を必要としない他の言語については、追加のパスを実行するだけの言語もあれば、コンパイル時に引数の数と型、または戻り値の型を知る必要がない言語もあります(代わりに実行時に関数を検索します) 、または最初から強く型付けされた変数がないため、「重要」ではないため、スキップできます。