我有以下代码协议摘要:
@protocol FooDelegate;
@interface Foo:UIViewController { id代表; } ...
@protocol FooDelegate ...... //方法1 ...... //方法2 ... @end
此外,以下代码实现了FooDelegate:
@interface Bar1:UIViewController {...}
@interface Bar2:UITableViewController {...}
事实证明,在Bar1和Bar2类中,FooDelegate的实现是相同的。我目前只是将FooDelegate实现代码从Bar1复制到Bar2。
如何以一种方式构建/实现Bar1和Bar2在单个代码库中共享相同的代码(不是当前有2个副本),因为它们是相同的?
提前感谢您的帮助。
答案 0 :(得分:1)
选项A:在类别中实施方法
使用的任何属性都必须在UIViewController
中声明。
UITableViewController
是UIViewController
的子类。
//UIViewController+MyAdditions.h
@interface UIViewController (MyAdditions)
- (void)myCommonMethod;
@end
//UIViewController+MyAdditions.m
@implementation UIViewController (MyAddtions)
- (void)myCommonMethod {
// insert code here
}
添加到UIViewController
的新方法将由Bar1
和Bar2
继承
选项B:创建MyViewControllerHelper
类
如果可以,请将您的公共代码实现为类方法,否则您需要暂时或作为Bar1
和Bar2
@interface MyViewControllerHelper : NSObject
- (void)myCommonMethod;
@end
@implementation MyViewControllerHelper
- (void)myCommonMethod {
// common code here
}
@interface Bar1 : UIViewController {
MyViewControllerHelper *helper;
}
@property MyViewControllerHelper *helper;
@end
@implementation Bar1
@synthesize helper;
- (void)someMethod {
[helper myCommonMethod];
}
@end
@interface Bar2 : UITableViewController {
MyViewControllerHelper *helper;
}
@property MyViewControllerHelper;
@end
@implementation Bar2
@synthesize helper;
- (void)someOtherMethod {
[helper myCommonMethod];
}
@end
答案 1 :(得分:0)
创建一个新对象MyFooDelegate:
@interface MyFooDelegate : NSObject <FooDelegate>
然后Bar1和Bar2都可以创建它的实例(或共享一个实例)。在这些类中,您可以消除委托方法并添加如下行:
MyFooDelegate *myDooDelegateInstance = ...;
foo.delegate = myFooDelegateInstance;
如果需要,您还可以在NIB文件中创建MyFooDelegate实例,并将视图控制器的委托出口连接到它。
这样,您的源文件或可执行文件中就不会有任何重复的代码。