こんにちは、objective-c のカテゴリを知りたいです
私は3つのファイルを持っています
A_ViewController
A_ViewController+カテゴリ
B_ViewController
ここにコード例があります
1-1. A_ViewController.h
@interface A_ViewController {
// some instance Variables
}
//some public methods
@end
1-2 A_ViewController.m
#import "A_ViewController.h."
@implementation A_ViewController
// implementation public methods and private methods
@end
2-1. A_ViewController+Category.h
@interface A_ViewControler(Category)
-(void) categoryMethod;
@end
2-2. A_ViewController+Category.m
#import "A_ViewController.h"
#import "A_ViewController+Category.h"
@implementation A_ViewController(Category)
-(void) categoryMethod {
NSLog(@"it's A_ViewController+Category");
}
@end
3-1. B_ViewController.h
@interface B_ViewController {
// some instance variables
}
-(void) myMethod;
3-2. B_ViewController.m
#import "B_ViewController.h"
#import "A_ViewController.h"
@interface A_ViewController() // i think it's A_ViewController extension, not A_ViewController+Category, am i right?
-(void) categoryMethod;
@end
@implementation B_ViewController
-(void) myMethod
{
A_ViewController *obj = [[A_ViewController alloc] init];
[obj categoryMethod];
}
@end
A_ViewController+Category.h をインポートしていないため、クラッシュしたと思いました。
私は-(void) categoryMethod
B_ViewController.mに実装していません
しかし、それは正常に動作し、警告はありません。
どの[obj categoryMethod]
ようにリンクできますか??
それが完全に優れた構文である場合、拡張機能に関する質問があります。
A_ViewController+Category2 という別のカテゴリがある場合
ここに A_ViewController+Category.h があります
@interface A_ViewController(Category2)
-(void) categoryMethod;
@end
および A_ViewController+Category2.m
#import "A_ViewController.h"
#import "A_ViewController+Category2.h"
@implementation A_ViewController(Category2)
-(void) categoryMethod
{
NSLog(@"it's A_ViewController+Category2");
}
@end
この状況で 3-2 のようなコードを書くと
その後、[obj categoryMethod]
保証することができます
それは A_ViewController+Category または A_ViewController+Category2 から来ていますよね?