我想知道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
我在B_ViewController.m
中没有实现-(void) categoryMethod
但它工作正常,没有警告。
如何[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,对吗?
答案 0 :(得分:0)
我正在努力解决你想要做的事情,但是关于标准类别的行为。
如果要在categoryMethod
内的A_ViewController
实例上调用B_BiewController
,则需要导入包含类别方法@interface的标题。
您无法在()
内的A_ViewController
上声明私人类别B_ViewController.m
,因为私有类别或类别扩展是特殊类别。
B_ViewController.m应如下所示
#import "B_ViewController.h"
#import "A_ViewController+Category.h"
@implementation B_ViewController
- (void) myMethod {
A_ViewController *obj = [[A_ViewController alloc] init];
[obj categoryMethod];
}
@end
修改
我刚刚注意到您的Category2
方法名称与您的Category
方法名称相同。这是Objective C中不正确和未定义的行为。