为什么要使用Message Forwarding

时间:2014-05-21 20:09:48

标签: objective-c

为什么要在Objective-c中使用Message Forwarding。使用它时,还需要使用performSelector调用Surragate方法吗?我在想你在编码时有很多知识,你为什么需要Message Forwarding。我正在读这是Obj-c多重继承 - 但我不会这样看,它只是附加到对象的另一个对象。

希望你知道并有一个实际的例子

由于

1 个答案:

答案 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