我有一个定义一些属性的协议。我的文档类符合此协议。对于我喜欢这些变量的任何其他类,我将文档类设置为委托,以便我可以在其中编写getter / setter,如:
- (NSArray *)array
{
if (self.delegate) {
return self.delegate.array;
} else {
return [[NSArray alloc] init];
}
}
这样我就有一个地方可以存储我的东西(没有不必要的副本),我只是问我的代表,直到链到达文档类。问题:如果我向协议添加一个新变量,并且必须在任何地方添加getter / setter!而且由于它们都是一样的,我正在寻找一种方法来外包这段重复的代码。
答案 0 :(得分:1)
将代理转发方法问题的一般解决方案称为“消息转发”(并不奇怪),并且在此处记录良好:
正如您在阅读该页面时所看到的那样,解决的问题与您提出的问题非常相似。
答案 1 :(得分:1)
黑客就是在category
上创建NSObject
并将其包含在您需要的地方。在该类别中,
delegate
属性getter选择器以下是NSObject+Extentions.m
中的代码应如何显示:
@implementation NSObject (Extentions)
- (NSArray *)array {
if ([self respondsToSelector:@selector(setDelegate:)]) {
id delegate = [self performSelector:@selector(delegate)];
return [delegate performSelector:@selector(array)];
} else {
return [[NSArray alloc] init];
}
}
@end