static func appendMissingObjToArray(var oldArray:[AnyObject],newArray:[AnyObject]){
    for n in newArray{
        var isExist = false
        for o in oldArray{
            if(n.isEqual(o)){
                //exist
                isExist = true
                break
            }
        }
        if(!isExist){
            oldArray.append(n)
        }
    }
}


上面的功能是将一些数据从newArray追加到oldArray。
完成此功能时。从oldArray获取数据,我得到了BAD ACCESS错误。所以我认为这是由于在oldArray中新添加的对象已被释放并释放了newArray。

我可以做些什么来避免这种情况?

最佳答案

我相信您需要将oldArray参数声明为inout。如下:

//...
static func appendMissingObjToArray(inout oldArray:[AnyObject],newArray:[AnyObject]){
//...


然后,您可以执行以下操作(请注意下面的与号&

class01.appendMissingObjToArray(&myOldArray, newArray: myNewArray)
println(myOldArray) // will contain the appended result


这样完成的myOldArray(传递的数组)将被突变。因此,如果保留原件很重要,则可能需要传递原件的副本。

关于swift - 如何避免对象被释放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31655574/

10-10 16:30