iOS:删除对象或重新初始化阵列在Swift中



我是新来的,我想知道重复使用数组的野兽方法是要删除内部的所有对象还是重新初始化它。

例如,如果我有:

var my_array:NSMutableArray! //global variable

和我使用的第一种方法:

func firstMethod{
    my_array = NSMutableArray()
    my_array.addObject("one")
    my_array.addObject("two")
    my_array.addObject("three")
    ...
}

例如,现在在另一种方法中,我需要my_array空:

最好的解决方案是:

func newmethod() {
    my_array = NSMutableArray() //reinitialize (drastic method)
    //here, all new operation with my_array
}

还是?:

func newmethod() {
    if my_array == nil{
        my_array = NSMutableArray()
    } else {
        my_array.removeAllObjects()
    }
}

一般答案是取决于。在拥有可变的公共属性方面,尤其是在多线程应用程序方面,存在着一个很大的危险。

如果您始终重新初始化,则更有可能您免受多线程问题的安全。

如果您要清空数组,则可能是俯卧的多线程问题。当您在一个线程上清空数组并尝试访问另一个线程上的任何索引时,您可能会从界限中获得索引。

线程检查是阵列的计数。是10。线程B倒空 大批。数组的计数现在为0。线程A试图访问对象 索引3.崩溃。

即使您的代码看起来不错,也是如此:

if array.count > 3 {
    array[3].doThings()
}

多线程意味着另一个线程在该代码之间突变数组检查计数和该代码访问索引的代码。

我会尽可能地选择不变的物体,并且我会避免突变的可变物体,而这些物体有可能以线程不安全的方式访问。

为什么您要重新初始化该数组,因此无需重新初步。你可以这样做

if (my_array == nil){
            my_array = NSMutableArray();
        }
        else{
            //my_array.removeAllObjects();
            // Do your stuff here
        }

最新更新