方法Swizzling - 请解释此实现中的属性映射

时间:2015-03-17 21:28:53

标签: objective-c method-swizzling

我正在研究一个开源的pull-to-refresh控件,它在UIViewController类别上调整生命周期方法,如下所示:

- (void)INBPullToRefreshView_viewWillAppear:(BOOL)animated
{
    [self setClearNavigationBar:YES];
    [self INBPullToRefreshView_viewWillAppear:animated];
    UITableView *tableView = self.pullToRefresh.tableView;
    tableView.contentOffset = tableView.contentOffset;
    self.pullToRefresh.showPullToRefresh = YES;
}

我在调用viewWillAppear时得到它,它映射到上面的方法,并且调用[self INBPullToRefreshView_viewWillAppear:animated];将映射到原始viewWillAppear

但是,以下是做什么的?:

tableView.contentOffset = tableView.contentOffset;

这里是控件的github source

2 个答案:

答案 0 :(得分:3)

我怀疑作者试图使用setContentOffset:的副作用,可能会强制重新计算。但作者似乎对该项目很活跃,那么为什么不在github问题中询问intmain?

当然,这种方法调整的标准警告是非常危险和脆弱的。

答案 1 :(得分:2)

我相信你会问一些与调酒本身无关的事情?

设置contentOffset属性将导致发送给对象委托的scrollViewDidScroll:消息。这可能是一种更清洁的方法(或者至少它应该有评论)