找不到方法时处理
如下所示,当 person
对象找不到对应的 run
方法出现闪退时,可以使用 runtime
所学知识来处理
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
Person *person = [[Person alloc]init];
[person run];
return YES;
}
解决方案如下,在 person.m
中实现如下方法即可
@implementation Person
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
//本来能调用的方法
if ([self respondsToSelector:selector])
{
return [super methodSignatureForSelector:selector];
}
//找不到方法
return [NSMethodSignature signatureWithObjCTypes:"v@:"];
}
- (void)forwardInvocation:(NSInvocation *)anInvocation
{
NSLog(@"找不到方法:%@",NSStringFromSelector(anInvocation.selector));
}
@end
如果要想所有的类找不到方法时均不出现闪退,则可以用 NSObject+分类
的方法实现上述方法来避免因找不到方法而出现闪退
网友评论