项目中防止数据字典越界,无需更改任何代码.

简介: 项目中防止数据字典越界,无需更改任何代码.

如题,写了两个几个分类 github下载地址

https://github.com/JianWenXie/array-dict-Safe.h.git
//
//  NSArray+Safe.h
//  KVOTest
//
//  Created by StriEver on 16/7/29.
//  Copyright © 2016年 StriEver. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface NSArray (Safe)
@end
//
//  NSArray+Safe.m
//  KVOTest
//
//  Created by StriEver on 16/7/29.
//  Copyright © 2016年 StriEver. All rights reserved.
//
#import "NSArray+Safe.h"
#import <objc/runtime.h>
#import "NSObject+ImpChangeTool.h"
@implementation NSArray (Safe)
+ (void)load{
    static dispatch_once_t onceDispatch;
    dispatch_once(&onceDispatch, ^{
        [self SwizzlingMethod:@"objectAtIndex:" systemClassString:@"__NSArrayI" toSafeMethodString:@"st_objectAtIndex:" targetClassString:@"NSArray"];
         [self SwizzlingMethod:@"initWithObjects:count:" systemClassString:@"__NSPlaceholderArray" toSafeMethodString:@"initWithObjects_st:count:" targetClassString:@"NSArray"];
//        
        [self SwizzlingMethod:@"arrayByAddingObject:" systemClassString:@"__NSArrayI" toSafeMethodString:@"arrayByAddingObject_st:" targetClassString:@"NSArray"];
    });
}
- (id)st_objectAtIndex:(NSUInteger)index{
    //判断数组是否越界
    if (index >= [self count]) {
        NSLog(@"👻数组越界了");
        return nil;
    }
    return [self st_objectAtIndex:index];
}
- (NSArray *)arrayByAddingObject_st:(id)anObject {
    if (!anObject) {
         NSLog(@"👻插入空数据啦");
        return self;
    }
    return [self arrayByAddingObject_st:anObject];
}
- (instancetype)initWithObjects_st:(id *)objects count:(NSUInteger)count {
    NSUInteger newCount = 0;
    for (NSUInteger i = 0; i < count; i++) {
        if (!objects[i]) {
            break;
        }
        newCount++;
    }
    self = [self initWithObjects_st:objects count:newCount];
    return self;
}
@end

这个是对数组防错的一个分类,可还有可变数组,|字典|可变字典....

想到要复制这么多代码太累了,

我还是老老实实全部上传github上去吧.

大伙只需要把分类丢到自己项目中就可以搞定

https://github.com/JianWenXie/array-dict-Safe.h.git


相关文章
|
6月前
|
存储 前端开发 Java
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
若依修改----数据字典,可以用于维护系统中常见的静态数据,为什么不写死,用字典维护?数据字典的好处是一个地方编写数据,在多个地方,复用他,静态选项这里填完,换其他,用户性别这里的男女,就转成而来字典
分页列表数据不出来,初始化页面数据不出来的原因,Create中传一个参数1,解决bug的方法,学习敲代码的时候仔细与原项目比对,从上比到下
分页列表数据不出来,初始化页面数据不出来的原因,Create中传一个参数1,解决bug的方法,学习敲代码的时候仔细与原项目比对,从上比到下
|
7月前
|
监控 Java
记录页面修改差异(java注解实现)
记录页面修改差异(java注解实现)
|
8月前
|
数据建模 Linux Android开发
Mstar 9632方案调试杂项临时笔记
Mstar 9632方案调试杂项临时笔记
312 0
|
8月前
|
SQL 数据库连接 数据库
ODBC配置数据源及相关问题(“找不到工程和库”“实时错误91对象变量或with块变量未设置”等)
ODBC配置数据源及相关问题(“找不到工程和库”“实时错误91对象变量或with块变量未设置”等)
|
Java Android开发
eclipse保存自动组织导入、删除不必要的导入、格式化代码
eclipse保存自动组织导入、删除不必要的导入、格式化代码
【C版本】静态通讯录与动态通讯录的实现,以及各自所存在的缺陷对比。(含所有原码)
【C版本】静态通讯录与动态通讯录的实现,以及各自所存在的缺陷对比。(含所有原码)
|
安全 API Android开发
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
579 0
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
|
Web App开发 Windows
当UI走查说页面色值错误时,先别急着检查代码
颜色一直是UI设计师们非常敏感的问题,为何屏幕会出现色差?工作中如何避免?
|
PHP 数据库
【laravel项目】@13 解决访问器与数据填充冲突(1)
【laravel项目】@13 解决访问器与数据填充冲突
114 0
【laravel项目】@13 解决访问器与数据填充冲突(1)