当前位置: 首页 > news >正文

网站建设在整体布局有哪些要求/seo综合查询

网站建设在整体布局有哪些要求,seo综合查询,网站更换网址如何查找,各大招聘网站IOS应用崩溃一直是一个很苦恼的问题,而崩溃的同时又未获取bug原因,更令人苦恼。 好在苹果自带的crash检测api,以及runloop可以让应用复活一次,不过第二次依旧会崩溃,但是还是一个很实用的小技巧。 以下是IOS崩溃复活…

IOS应用崩溃一直是一个很苦恼的问题,而崩溃的同时又未获取bug原因,更令人苦恼。

好在苹果自带的crash检测api,以及runloop可以让应用复活一次,不过第二次依旧会崩溃,但是还是一个很实用的小技巧。

以下是IOS崩溃复活的类和使用方法

#import "CrashHandler.h"//Appdelagte中注册crash记录上报- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.[CrashHandler sharedInstance];return YES;}//.h文件#import <Foundation/Foundation.h>@interface CrashHandler : NSObject{BOOL ignore;}+ (instancetype)sharedInstance;@end//.m文件#import "CrashHandler.h"#import <UIKit/UIKit.h>#include <libkern/OSAtomic.h>#include <execinfo.h>NSString * const kSignalExceptionName = @"kSignalExceptionName";NSString * const kSignalKey = @"kSignalKey";NSString * const kCaughtExceptionStackInfoKey = @"kCaughtExceptionStackInfoKey";void HandleException(NSException *exception);void SignalHandler(int signal);@implementation CrashHandlerstatic CrashHandler *instance = nil;+ (instancetype)sharedInstance{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{instance = [[[self class] alloc] init];});return instance;}+ (instancetype)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{instance = [super allocWithZone:zone];});return instance;}- (instancetype)init{self = [super init];if (self) {[self setCatchExceptionHandler];}return self;}- (void)setCatchExceptionHandler{// 1.捕获一些异常导致的崩溃NSSetUncaughtExceptionHandler(&HandleException);// 2.捕获非异常情况,通过signal传递出来的崩溃signal(SIGABRT, SignalHandler);signal(SIGILL, SignalHandler);signal(SIGSEGV, SignalHandler);signal(SIGFPE, SignalHandler);signal(SIGBUS, SignalHandler);signal(SIGPIPE, SignalHandler);}+ (NSArray *)backtrace{void* callstack[128];int frames = backtrace(callstack, 128);char **strs = backtrace_symbols(callstack, frames);NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames];for (int i = 0; i < frames; i++) {[backtrace addObject:[NSString stringWithUTF8String:strs[i]]];}free(strs);return backtrace;}- (void)alertView:(UIAlertView *)anAlertView clickedButtonAtIndex:(NSInteger)anIndex{if (anIndex == 0) {ignore = YES;} else if (anIndex == 1) {NSLog(@"起死回生");}}- (void)handleException:(NSException *)exception{NSString *message = [NSString stringWithFormat:@"崩溃原因如下:\n%@\n%@",[exception reason],[[exception userInfo] objectForKey:kCaughtExceptionStackInfoKey]];NSLog(@"%@",message);UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"程序崩溃了"message:@"如果你能让程序起死回生,那你的决定是?"delegate:selfcancelButtonTitle:@"崩就蹦吧"otherButtonTitles:@"起死回生", nil];[alert show];CFRunLoopRef runLoop = CFRunLoopGetCurrent();CFArrayRef allModes = CFRunLoopCopyAllModes(runLoop);while (!ignore) {for (NSString *mode in ( __bridge NSArray *)allModes) {CFRunLoopRunInMode((CFStringRef)mode, 0.001, false);}}CFRelease(allModes);NSSetUncaughtExceptionHandler(NULL);signal(SIGABRT, SIG_DFL);signal(SIGILL, SIG_DFL);signal(SIGSEGV, SIG_DFL);signal(SIGFPE, SIG_DFL);signal(SIGBUS, SIG_DFL);signal(SIGPIPE, SIG_DFL);if ([[exception name] isEqual:kSignalExceptionName]) {kill(getpid(), [[[exception userInfo] objectForKey:kSignalKey] intValue]);} else {[exception raise];}}@endvoid HandleException(NSException *exception){// 获取异常的堆栈信息NSArray *callStack = [exception callStackSymbols];NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];[userInfo setObject:callStack forKey:kCaughtExceptionStackInfoKey];CrashHandler *crashObject = [CrashHandler sharedInstance];NSException *customException = [NSException exceptionWithName:[exception name] reason:[exception reason] userInfo:userInfo];[crashObject performSelectorOnMainThread: @selector(handleException:) withObject:customException waitUntilDone:YES];}void SignalHandler(int signal){// 这种情况的崩溃信息,就另某他法来捕获吧NSArray *callStack = [CrashHandler backtrace];NSLog(@"信号捕获崩溃,堆栈信息:%@",callStack);CrashHandler *crashObject = [CrashHandler sharedInstance];NSException *customException = [NSException exceptionWithName:kSignalExceptionNamereason:[NSString stringWithFormat:NSLocalizedString(@"Signal %d was raised.", nil),signal]userInfo:@{kSignalKey:[NSNumber numberWithInt:signal]}];[crashObject performSelectorOnMainThread: @selector(handleException:) withObject:customException waitUntilDone:YES];}
http://www.jmfq.cn/news/5127985.html

相关文章:

  • 为什么做视频网站违法/潍坊网站外包
  • seo做的最好的网站/电商培训机构排名
  • 装饰网站建设网/网络软文名词解释
  • 有做a50期货的网站/苏州网站制作
  • wordpress建站教程交友/百度下载app安装
  • 淄博的大型网站建设/短视频代运营公司
  • 网站建设英文怎么说/杭州专业seo服务公司
  • 代码大全可复制免费/抖音seo关键词优化
  • 网站建设渠道/b站软件推广大全
  • 二手商城网站建设论文/平台营销策略
  • 网站制作cms/外链群发平台
  • 做网站怎么招广告/seo网络推广哪家专业
  • 专业开发网站设计/东莞网络推广策略
  • 东莞品牌网站建设费用/免费的行情网站app软件
  • 团购火锅自助网站建设/2022年免费云服务器
  • 深圳网站制作公司建设/长沙靠谱关键词优化服务
  • 金融手机网站开发/品牌网站建设方案
  • 网站后台密码/百度快速查询
  • 做经营性的网站需要注册什么条件/官方百度app下载
  • 网站建设网络推广代理公司/北京百度搜索优化
  • 福建省高速公路建设管理网站/常见的搜索引擎有哪些?
  • 母婴类网站 网站建设方案书 备案/企业网站建设方案
  • 营口网站制作公司/百度小程序优化排名
  • 简单制作网页/杭州优化建筑设计
  • 用jsp做网站有什么好处/打广告去哪个平台
  • 广州网站建设企业/电商培训视频教程
  • 国内红酒网站建设/媒介星软文平台
  • 东莞做网站公司首选/个人推广app的妙招
  • 河北网站制作公司哪家好/百度资源搜索引擎
  • 思途旅游cms网站建设系统/百度 seo排名查询