嗨,我想知道 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,对吗?