为什么要在Objective-c中使用Message Forwarding。使用它时,还需要使用performSelector调用Surragate方法吗?我在想你在编码时有很多知识,你为什么需要Message Forwarding。我正在读这是Obj-c多重继承 - 但我不会这样看,它只是附加到对象的另一个对象。
希望你知道并有一个实际的例子
由于
答案 0 :(得分:3)
请参阅本节末尾的讨论:http://www.apeth.com/iOSBook/ch25.html#_uitabbar
这里我插入了自己的对象作为Apple的一个表视图的数据源。我不知道桌面视图是如何工作的(它是Apple的),而且我不知道他们的数据源是什么(它是Apple的#)。所以我替换了我自己的数据源,但是我保留了Apple,并且任何我不会处理到达我的数据源的消息都会传递给Apple。从某种意义上说,我已经制作了我的数据源"继承"来自Apple的。
@implementation MyDataSource
- (id)forwardingTargetForSelector:(SEL)aSelector {
if ([self.originalDataSource respondsToSelector: aSelector])
return self.originalDataSource;
return [super forwardingTargetForSelector:aSelector];
}
- (NSInteger)tableView:(UITableView *)tv numberOfRowsInSection:(NSInteger)sec {
// this is just to quiet the compiler
return [self.originalDataSource tableView:tv numberOfRowsInSection:sec];
}
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)ip {
// this is why we are here: my tweaks
UITableViewCell* cell = [self.originalDataSource tableView:tv cellForRowAtIndexPath:ip];
cell.textLabel.font = [UIFont fontWithName:@"GillSans-Bold" size:14];
return cell;
}
@end