OC筆記 - 如何防止unrecognized selector sent to instance錯誤
阿新 • • 發佈:2022-05-30
防止unrecognized selector sent to instance錯誤
1 - 我們在開發過程中經常會遇到 unrecognized selector sent to instance 錯誤
2 - 程式碼示例:呼叫 Person中不存在的方法,程式不會 crash
// - Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject -(void)run; @end
// -Person.m
#import "Person.h" @implementation Person -(void)run{ NSLog(@"Person run......."); } // 方法簽名 - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector{ if ([self respondsToSelector:aSelector]) { return [super methodSignatureForSelector:aSelector]; } // 返回找不到的方法 return [NSMethodSignature signatureWithObjCTypes:"v@:"]; } // 找不到的方法都回來到這裡 - (void)forwardInvocation:(NSInvocation *)anInvocation{ NSLog(@"找不到 %@方法",NSStringFromSelector(anInvocation.selector)); } @end
// - main.m
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { Person *p1 = [Person new]; // Person中只有 run方法 [p1 run]; // 呼叫不存在的方法 [p1 makeTest]; [p1 goTest]; return 0; }
日誌資訊