美文网首页
使用消息转发处理消息崩溃

使用消息转发处理消息崩溃

作者: 活最好的自己 | 来源:发表于2019-03-23 23:50 被阅读0次

在移动端APP开发中,崩溃率是一个衡量APP性能的一个很重要的指标。常见的崩溃有服务器返回数据崩溃、内存泄漏崩溃、多个子线程同时操作ui崩溃。

服务器返回数据异常崩溃

服务器返回的数据通常有数字、字符串、 数组和字典四种类型,倘若服务器返回异常数据null,程序有可能把它当做以上四种中的其中一种处理,必会导致 unrecognized selector 崩溃。

NSNull 分类

iOS 会把收到的 json 值 null 解析成 NSNull 字段,这时候可以在 NSNull 分类中转发以上四种类型的消息,防止崩溃。

#define JsonObjects @[@"",@0,@{},@[]]
@implementation NSNull (safe)

- (id)forwardingTargetForSelector:(SEL)aSelector {
    if (![self respondsToSelector:aSelector]) {
        
        // 没有实现的方法,从四种常见数值对象中查找
        for (id jsonObj in JsonObjects) {
            if ([jsonObj respondsToSelector:aSelector]) {
                NSLog(@"消息响应对象用%@代替",[jsonObj class]);
                return jsonObj;
            }
        }
    }
    return [super forwardingTargetForSelector:aSelector];
}
@end

测试方法如下:

-(void)test1{
    NSDictionary *dict = [NSNull null];
    [dict objectForKey:@"12"];
}

NSNumber 等的分类

另外,对于约定好服务器返回字符串类型的,结果却返回了数值类型,在给NSNumber对象发送NSString 类型的消息时,可以在 NSNumber 、NSString、NSArray、NSDictionary 分类中按照以上方式转发消息。

#define JsonObjects @[@"",@0,@{},@[]]
@implementation NSNumber (safe)

- (id)forwardingTargetForSelector:(SEL)aSelector {
    if (![self respondsToSelector:aSelector]) {
        // 没有实现的方法,从四种常见数值对象中查找
        for (id jsonObj in JsonObjects) {
            if ([jsonObj respondsToSelector:aSelector]) {
                NSLog(@"消息响应对象用%@代替",[jsonObj class]);
                return jsonObj;
            }
        }
    }
    return [super forwardingTargetForSelector:aSelector];
}
@end

测试方法如下:

-(void)test2{
    NSString *num = @(12);
    num = [num stringByAppendingString:@"元"];
    NSLog(@"%@",num);
}

相关文章

  • 使用消息转发处理消息崩溃

    在移动端APP开发中,崩溃率是一个衡量APP性能的一个很重要的指标。常见的崩溃有服务器返回数据崩溃、内存泄漏崩溃、...

  • 崩溃预防处理 消息转发

    新建NSObject分类 如下情况不会崩溃,会走消息转发机制打印信息

  • Runtime 消息转发

    目录 消息转发背景知识 消息转发使用方式 消息转发常见问题 消息转发背景知识 1.消息转发的定义Objective...

  • RunTime 之消息处理与消息转发

    前言 有关Runtime的知识总结,我本来想集中写成一篇文章的,但是最后发现实在是太长,而且不利于阅读,最后分成了...

  • iOS 消息处理流程、消息转发流程

    我们知道将源代码转化为可执行的文件要经过三个阶段:编译、链接、运行。不同的编译语言有有所不同。 在iOS中函数的调...

  • (十二) [OC高效系列]消息的派发机制

    1.什么是消息转发机制 消息转发机制是在调用未知方法时出现的 消息转发机制让程序员有机会去处理未知方法 消息转发机...

  • 使用NSMethodSignature消息转发

    消息转发是什么 在oc中调用方法就是发送消息(msgSend),如果给一个实例对象(Instance)发送一个未定...

  • iOS消息转发小记

    消息转发流程图 如果类接收到无法处理的消息,会触发消息转发机制,一共有三个步骤,接受者在每一步中均有机会处理消息。...

  • Objective-C消息转发机制

    当对象收到与其不匹配的消息时,通过消息转发机制可以使对象执行用户预先定义的处理过程。消息转发有快速转发和标准(完整...

  • 消息发送,消息转发

    [receiver message]; 这一句的含义是:向receiver发送名为message的消息。 运行 c...

网友评论

      本文标题:使用消息转发处理消息崩溃

      本文链接:https://www.haomeiwen.com/subject/kruevqtx.html