NSInvocation的基本使用
//封裝invacation可以調用多個參數的方法
-(void)invacation
{
//1.創建一個MethodSignature,簽名中保存了方法的名稱,參數和返回值
//這個方法屬于誰,那么就用誰來進行創建
//注意:簽名一般是用來設置參數和獲得返回值的,和方法的調用沒有太大的關系
NSMethodSignature *signature = [ViewController instanceMethodSignatureForSelector:@selector(callWithNumber:andContext:withStatus:)];
/*注意不要寫錯了方法名稱
// NSMethodSignature *signature = [ViewController methodSignatureForSelector:@selector(call)];
*/
//2.通過MethodSignature來創建一個NSInvocation
//NSInvocation中保存了方法所屬于的對象|方法名稱|參數|返回值等等
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
/*2.1 設置invocation,來調用方法*/
invocation.target = self;
// invocation.selector = @selector(call);
// invocation.selector = @selector(callWithNumber:);
// invocation.selector = @selector(callWithNumber:andContext:);
invocation.selector = @selector(callWithNumber:andContext:withStatus:);
NSString *number = @"10086";
NSString *context = @"下課了";
NSString *status = @"睡覺的時候";
//注意:
//1.自定義的參數索引從2開始,0和1已經被self and _cmd占用了
//2.方法簽名中保存的方法名稱必須和調用的名稱一致
[invocation setArgument:&number atIndex:2];
[invocation setArgument:&context atIndex:3];
[invocation setArgument:&status atIndex:4];
/*3.調用invok方法來執行*/
[invocation invoke];
}
11 異常處理
01 一般處理方式:
a.app異常閃退,那么捕獲crash信息,并記錄在本地沙盒中。
b.當下次用戶重新打開app的時候,檢查沙盒中是否保存有上次捕獲到的crash信息。
c.如果有那么利用專門的接口發送給服務器,以求在后期版本中修復。
02 如何拋出異常
//拋出異常的兩種方式
// @throw [NSException exceptionWithName:@"好大一個bug" reason:@"異常原因:我也不知道" userInfo:nil];
//方式二
NSString *info = [NSString stringWithFormat:@"%@方法找不到",NSStringFromSelector(aSelector)];
//下面這種方法是自動拋出的
[NSException raise:@"這是一個異常" format:info,nil];
03 如何捕獲異常
NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);
void UncaughtExceptionHandler(NSException *exception) {
NSArray *arr = [exception callStackSymbols];//得到當前調用棧信息
NSString *reason = [exception reason];//非常重要,就是崩潰的原因
NSString *name = [exception name];//異常類型
NSString *errorMsg = [NSString stringWithFormat:@"當前調用棧的信息:%@\nCrash的原因:%@\n異常類型:%@\n",arr,reason,name];
//把該信息保存到本地沙盒,下次回傳給服務器。
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。