美文网首页
ios 如何设计一个安全的数据或者数据容器

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

作者: iOS_YS_李 | 来源:发表于2022-03-30 00:22 被阅读0次

    如何设计一个安全数组

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

    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

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

    相关文章

      网友评论

          本文标题:ios 如何设计一个安全的数据或者数据容器

          本文链接:https://www.haomeiwen.com/subject/jscijrtx.html