Метод 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 для элемента управления.


person OdieO    schedule 17.03.2015    source источник


Ответы (2)


Я полагаю, вы спрашиваете что-то, не связанное с самим пьянством?

Установка свойства contentOffset приведет к отправке сообщения scrollViewDidScroll: делегату вашего объекта. Вероятно, есть более чистый способ сделать это (или, по крайней мере, он должен иметь комментарий)

person KirkSpaziani    schedule 17.03.2015

Я подозреваю, что автор пытается использовать побочный эффект setContentOffset:, возможно, заставляя пересчитывать. Но автор, похоже, активно участвует в проекте, так почему бы не задать вопрос intmain в github?

Конечно, применяются стандартные предупреждения о том, что этот метод swizzling чрезвычайно опасен и хрупок.

person Rob Napier    schedule 17.03.2015