如果selector是在运行时才确定的,performSelector时,若先把selector保存起来,等到某事件发生后再调用,相当于在动态绑定之上再使用动态绑定,不过这是编译器不知道要执行的selector是什么,因为这必须到了运行时才能欧确定,使用这种特性的代价是,如果在ARC下编译代码,编译器会发生如下的警告:
warning:performSelector may cause a leak because its selector is unknown [-Warc-performSelector-leak]
使用如下方法忽略警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored “-Warc-performSelector-leaks"
/////
#pragma clang diagnostic pop
方法弃用警告
"-Wincompatible-pointer-types"
不兼容指针类型
"-Wincompatible-pointer-types"
循环引用
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-retain-cycles"
self.completionBlock = ^ {
...
};
#pragma clang diagnostic pop
未使用变量
#pragma clang diagnostic ignored "-Wunused-variable"
int a;
#pragma clang diagnostic pop
未使用default
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wcovered-switch-default"
// switch (style) {
// case UITableViewCellStyleDefault:
// case UITableViewCellStyleValue1:
// case UITableViewCellStyleValue2:
// case UITableViewCellStyleSubtitle:
// // ...
// default:
// return;
// }
#pragma clang diagnostic pop