-
pod 'SafeObject'
-
执行pod search SafeObject提示搜索不到,可以执行以下命令更新本地search_index.json文件
rm ~/Library/Caches/CocoaPods/search_index.json
- 如果pod search还是搜索不到,执行pod setup命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了
- 数组下标越界
示例代码:
- (void)testArrayOutOfBounds { NSArray *testArray = @[@1,@2,@3]; NSNumber *num = testArray[3]; }
- 字典构造造与修改
示例代码:
- (void)testDicSetNilValueCrash { // 构造不可变字典时 key和value都不能为空 NSString *nilValue = nil; NSString *nilKey = nil; NSDictionary *dic1 = @{@"key" : nilValue}; NSDictionary *dic2 = @{nilKey : @"value"}; }
- Runtime解决数据越界及字典key或value为nil的情况,主要通过Runtime的方法交换实现,可以扩展一下NSObject分类:
+ (void)exchangeInstanceMethodWithSelfClass:(Class)selfClass originalSelector:(SEL)originalSelector swizzledSelector:(SEL)swizzledSelector { Method originalMethod = class_getInstanceMethod(selfClass, originalSelector); Method swizzledMethod = class_getInstanceMethod(selfClass, swizzledSelector); BOOL didAddMethod = class_addMethod(selfClass, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); if (didAddMethod) { class_replaceMethod(selfClass, swizzledSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod)); } else { method_exchangeImplementations(originalMethod, swizzledMethod); } }
/** 在range范围内, 移除掉anObject @param anObject 移除的anObject @param range 范围 */ - (void)safeMutable_removeObject:(id)anObject inRange:(NSRange)range { if (range.location > self.count) { return; } if (range.length > self.count) { return; } if ((range.location + range.length) > self.count) { return; } if (!anObject){ return; } return [self safeMutable_removeObject:anObject inRange:range]; }