iOS UITableView扩展类,在其他类没有引用,为什么扩展类的方法还可以起作用?
(void)load {
// 只交换一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
Method reloadData = class_getInstanceMethod(self, @selector(reloadData));
Method xy_reloadData = class_getInstanceMethod(self, @selector(xy_reloadData));
method_exchangeImplementations(reloadData, xy_reloadData);
Method dealloc = class_getInstanceMethod(self, NSSelectorFromString(@"dealloc"));
Method xy_dealloc = class_getInstanceMethod(self, @selector(xy_dealloc));
method_exchangeImplementations(dealloc, xy_dealloc);
});
}
Apple文档对load的discussion:“The load message is sent to classes and categories that are both dynamically loaded and statically linked, but only if the newly loaded class or category implements a method that can respond.”
大意是,"load消息被发送给类和类别,动态加载和静态链接都是如此, 前提是新加载的类或类别实现了load方法"。
虽然"UITableView扩展类,在其他类没有引用“,但是UITableView扩展类的load方法已经在它被加载的那个时刻执行了。而且,load方法只有在加载类和类别时被调用, 所以没有必要在load方法里用dispatch_once保证代码只执行一次。
这个要看你具体如何处理的,是不是有控件绑定了,然后它本身就会有一些自动刷新等事件