1 用不用的话 你自己看
NSLog(@"%d",[Test instancesRespondToSelector:@selector(objectFun)]);
NSLog(@"%d",[Test instancesRespondToSelector:@selector(classFun)]);
NSLog(@"%d",[Test respondsToSelector:@selector(objectFun)]);
NSLog(@"%d",[Test respondsToSelector:@selector(classFun)]);
Test *obj = [[Test alloc] init];
NSLog(@"%d",[obj respondsToSelector:@selector(objectFun)]);
NSLog(@"%d",[obj respondsToSelector:@selector(classFun)]);
NSLog(@"%d",[obj.class instancesRespondToSelector:@selector(objectFun)]);
NSLog(@"%d",[obj.class instancesRespondToSelector:@selector(classFun)]);
2:用不用的话 你自己看
+ (void)exchangeMethod:(Method)originalMethod swapMothod:(Method)swapMothod
{
IMP originalImp = method_getImplementation(originalMethod);
IMP swapImp = method_getImplementation(swapMothod);
method_setImplementation(originalMethod, swapImp);
method_setImplementation(swapMothod, originalImp);
}
3 :这个没找到替代的方法 但是可能有人不知道是干嘛的 送个DEMO
- (int) getSignalLevel
{
void *libHandle = dlopen("/System/Library/Frameworks/CoreTelephony.framework/CoreTelephony",RTLD_LAZY);//获取库句柄
if (!libHandle) {
NSLog(@"Unable to open library: %s\n", dlerror());
return 1;
}
int (*CTGetSignalStrength)(); //定义一个与将要获取的函数匹配的函数指针
CTGetSignalStrength = (int(*)())dlsym(libHandle,"CTGetSignalStrength"); //获取指定名称的函数
if(CTGetSignalStrength == NULL)
return -1;
else{
int level = CTGetSignalStrength();
dlclose(libHandle); //切记关闭库
return level;
}
}