iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash。当然可以通过自定义dictionary 和array重载增删改查的方法来避免crash,但是由于许多工程基本成型以后,如此操作的话工作量,改动等都会很大。此时我们可以利用OC语言动态特性对数组和字典的增删改查方法进行Method Swizzling(不懂得自行百度吧) ,替换成我们经过安全操作的方法,从而进行安全操作。当然有好多大神已经实现过了,但是毕竟会用并不代表是自己的。好了废话不多说吧,下面我们就开始自己动手一步步实现我们自己的safe类吧。
主要的crash reason是数组越界,运行一下代码
程序崩溃 看下日志 reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]运行下面代码 数组中追加了一个nil值
程序崩溃日志reason: '*** -[NSArray arrayByAddingObject:]: object cannot be nil'
运行代码NSArray * testArray = [NSArray arrayWithObject:nil];崩溃日志reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]
可变数组常用方法 增删改查等 主要有1.[__NSPlaceholderArray initWithObjects:count:] 2.[__NSArrayM insertObject:atIndex:] 3.[__NSArrayM objectAtIndex:] 4.[__NSArrayM removeObjectAtIndex:] 5.[__NSArrayM replaceObjectAtIndex:withObject:] 6.[NSMutableArray replaceObjectsInRange:withObjectsFromArray:]不可变字典 初始化有空值 [__NSPlaceholderDictionary initWithObjects:forKeys:count:]可变字典常用方法setObject: forKey: removeObjectsForKeys: removeObjectForKey: 进行操作是key value 不能为nil对NSArray举例实现一下1\.新建NSArray的categary NSArray+Safe当数组越界时 crash reason[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2] 我们需要使用函数method_exchangeImplementations(method1,method2)交换两个方法的实现指针 因为交换指针需要多次使用,我们对此方法进行封装如下图:
实现一下load函数如下图
实现我们自定义的方法 如下图 ok,数组越界已经解决了!可以试一下啦!其他的都是大同小异,下面是我的github地址,将库拖到工程里边就可以啦!
转载于:https://www.cnblogs.com/akiha/p/5778893.html
