かなり新しい Objective-C プログラマー (4 年間の Java 経験) として、クラス拡張をいつ使用するかを理解するのに苦労しているようです。私が理解したことから (間違っている場合は訂正してください)、カテゴリと拡張機能の主な違いは、拡張機能ではメインの実装内でメソッドを実装することを期待しているのに対し、カテゴリでは別の実装にすることができることです。 . また、主にプライベート メソッド用に拡張機能を使用しているようです。
これが私の最初の質問です。クラス拡張を使用してプライベート メソッドを宣言する場合と、まったく宣言しない場合の違いは何ですか (どちらの場合も実行時にコンパイルされるようです)。(例 1 対 2)
例 1
@interface Class()
-(void) bar;
@end
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
例 2
@implementation Class
-(void) foo {
[self bar];
}
-(void) bar {
NSLog(@"bar");
}
@end
2 番目の質問: 拡張機能内で ivar を宣言することと、実装内で直接宣言することの違いは何ですか? (例 3 対 4)
例 3
@interface Class() {
NSArray *mySortedArray;
}
@end
@implementation Class
@end
例 4
@implementation Class
NSArray *mySortedArray;
@end
コーディング規約について最後に質問があります。変数名の前にアンダースコア (_) を付ける必要があるのはいつですか?
ありがとうございました