ios 如何设计一个安全的数据或者数据容器

2022-03-30  本文已影响0人  iOS_YS_李

如何设计一个安全数组

首先我们要知道数组有哪些不安全

1.数组为空

2.数组越界

3.数组一边执行删除一边执行添加

4.多线程访问,修改数组

5.数组排序后的同等元素下标index错乱

6.数组的遍历时候通过下标移除崩溃

7数组指定的元素类型但是被其他开发者引入了其他类型

一、首先1.2.7我们可以单独对数组进行判断,也可以在自己自定义的数组类内部进行判断

比如:

-(id)objectAtIndex_zmm:(NSUInteger)index

{

    if(self.count == 0){

        return nil;

    }

    if(index >= self.count){

        return nil;

    }

    return[self objectAtIndex:index];

}

二、指定的数组为NSMutableArray array通过isKandof判断,不符合类型直接返回,禁止其他操作

三、数组一边执行删除一边执行添加 可以单独对数组进行加锁,一个线程维护一个任务

内部也可以封装一个runloop,实时监控该数组被那个线程使用的线程状态,如果线程状态没有取消或者完成,正在执行,则退出新的操作

四  数组排序后的同等元素下标index错乱 使用稳定的排序算法,堆排序快速排序希尔排序直接选择排序是不稳定的排序算法,而冒泡排序直接插入排序折半插入排序归并排序是稳定的排序算法。

其次我们在声明数组的时候,如果确定只有单个线程去访问该数组,那么可以使用nonatomic来修饰,但是不确定或者知道可能有多个线程来访问的话,那么使用atomic来修饰,但是同时我们知道atomic是实现了一个互旋锁,而锁机制虽然能做到一个线程去处理一个事物,但是对性能上则出现了损耗。

所以,我们能否在NSMutableArray内部去处理一下多线程访问的东西呢

这里就是数组的内部设计

首先我们有必要先了解一下GCD的栅栏函数以及用法

https://www.jianshu.com/p/e4d5b26b6a36

五 最重要的是如何在数组内部设计一组安全接口来进行多线程的访问

https://www.jianshu.com/p/4195209e4d8e

思想就是对于引发值的改变的行为,让一个任务执行完,在递交给其他任务,这样每个任务维护的都是自己想要的结果。

上一篇下一篇

猜你喜欢

热点阅读