runtime实现数组中不能添加nil

Posted 风雨彩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了runtime实现数组中不能添加nil相关的知识,希望对你有一定的参考价值。

通过runtime的method_exchangeImplementations(Method m1, Method m2)方法,

可以进行交换方法的实现;一般用自己写的方法来替换系统的方法实现

例如:数组(字典)中不能添加nil,如果添加程序会崩,用自己的方法替换系统防止系统崩溃 

下面直接上代码

#import "NSMutableArray+YSExtension.h"
#import <objc/runtime.h>

@implementation NSMutableArray (YSExtension)

+ (void)load {
        Method orginalMethod = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(addObject:));
       Method newMethod = class_getInstanceMethod(NSClassFromString(@"__NSArrayM"), @selector(newAddobject:));
       method_exchangeImplementations(orginalMethod, newMethod);
}

- (void)newAddobject:(id)obj {
       if (obj != nil) {
          [self newAddobject:obj];
      }else{
        [self newAddobject:@""];
    }
}

@end

以上是关于runtime实现数组中不能添加nil的主要内容,如果未能解决你的问题,请参考以下文章

快速上手Runtime之给分类添加属性

Runtime objc4-779.1 为什么不能向一个已存在的类添加成员变量?有什么办法达到相同的效果?

iOS Runtime 动态添加属性不能添加intrinsic类型

Runtime objc4-779.1 为什么不能向一个已存在的类添加成员变量?有什么办法达到相同的效果?

IOS 中runtime 不可变数组__NSArray0 和__NSArrayI

c#中using System.Runtime.Serialization.Json;不能引用