概要
- OCでの分類:一部のメソッドは、元のコードを変更せずに特定のクラスに拡張できます。
- OC分類にカテゴリを追加することはできません
- OC分類とクラスに共通のメソッドがある場合、OC分類のメソッドが優先的に使用されます
- 複数のOC分類に同じメソッドが含まれています。コンパイルすると、後続の分類のメソッドが呼び出されます
分類するクラス(人物)
//Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
-(void)test;
@end
//Person.m
#import "Person.h"
@implementation Person
-(void)test
{
NSLog(@"调用了test方法");
}
@end
三人分類
3.1 Person + MJ
//Person.MJ.h
#import "Person.h"
@interface Person (MJ)
-(void)study;
@end
//Person+MJ.m
#import "Person+MJ.h"
@implementation Person (MJ)
- (void)study
{
NSLog(@"学习了——");
}
-(void)test
{
NSLog(@"Person+MJ.h调用了test方法");
}
@end
3.2 Person + JJ
//Person+JJ.h
#import "Person.h"
@interface Person (JJ)
-(void)test2;
@end
//Person.JJ.m
#import "Person+JJ.h"
@implementation Person (JJ)
-(void)test2
{
NSLog(@"test2----");
}
-(void)test
{
NSLog(@"Person+JJ.h---test");
}
@end
4コンパイル順序を調整する
5つのカテゴリ
5.1利点
- 巨大なクラスをモジュールで開発できます
- 巨大なクラスは複数の人で書くことができ、チームワークを促進します
5.2ノート
- カテゴリは初期クラスのインスタンス変数にアクセスできますが、変数のみを追加することはできず、メソッドのみを追加できます。変数を追加する場合は、継承によるサブクラスの作成を検討できます
- カテゴリは元のクラスのメソッドを実装できますが、元のメソッドに直接置き換わるため、お勧めできません。その結果、元のメソッドにアクセスできなくなります。
- 同じメソッドが複数のカテゴリに実装されている場合、コンパイルに関係する最後のメソッドのみが有効になります