在Swift中删除类的实例

时间:2018-07-29 17:39:35

标签: swift

如何在Swift中删除类的实例?寻找某种等同于

del instance

在Python中。我对Swift还是很陌生,在文档或以前的帖子中找不到任何内容。

我在游戏中有一个子弹类,与玩家碰撞后需要删除。示例代码可能类似于

class Bullet() {
    init() {
        for traveled in 0...range {
            //travel forward
            if collided {
                //damage collided player
                del self
    }
}

编辑:这就是为我清除的内容http://www.apeth.com/iOSBook/ch12.html#_memory_management

2 个答案:

答案 0 :(得分:1)

您的问题在Swift中没有多大意义。 Swift使用ARC(自动引用计数)来管理对象生命周期。

只要您对一个对象保持至少一个强引用,它就会存在。一旦没有更强的引用,它就会被释放。

请考虑以下代码。

class FooClass {
   var value: Int
}
var foo: FooClass?


foo = FooClass(value: 3)    


//foo will be valid

foo = nil; //This causes the object in `foo` to be deallocated immediately.

最接近del的东西(假设我了解它的作用-我不了解Python) 假设没有其他对对象的强引用,似乎将nil分配给可选的var。

答案 1 :(得分:0)

如另一个问题所述,

Swift使用Automatic Reference Counting

Apple这样解释:

  

ARC跟踪当前引用每个类实例的属性,常量和变量的数量。只要仍然存在对该实例的至少一个活动引用,ARC便不会取消分配该实例。


ARC实战

以下是自动引用计数工作方式的示例。该示例从一个简单的类Person开始,该类定义了一个存储的常量属性name

class Person {
    let name: String

    init(name: String) {
        self.name = name
        print("\(name) is being initialized")
    }

    deinit {
        print("\(name) is being deinitialized")
    }
}

Person类具有一个初始化程序,该初始化程序设置实例的name属性并显示一条消息,指示正在进行初始化。 Person类还具有一个反初始化器,该类将在取消分配该类的实例时显示一条消息。

下一个代码片段定义了三个Person?类型的变量,这些变量用于在后续代码片段中建立对新Person实例的多个引用。因为这些变量是可选类型(Person?,而不是Person),所以它们会自动用值nil初始化,并且当前不引用Person实例。

var reference1: Person?
var reference2: Person?
var reference3: Person?

您现在可以创建一个新的Person实例,并将其分配给以下三个变量之一:

reference1 = Person(name: "John Appleseed")
// Prints "John Appleseed is being initialized"

请注意,消息"John Appleseed is being initialized"会在您调用Person类的初始化程序时显示。这确认初始化已发生。

由于已将新的Person实例分配给reference1变量,因此从reference1到新的Person实例有了强大的引用。因为至少有一个强有力的参考,所以ARC确保将Person保留在内存中并且不会被释放。

如果将相同的Person实例分配给另外两个变量,则会建立对该实例的两个更强引用:

reference2 = reference1
reference3 = reference1

现在对此单个Person实例有3个强引用。

如果通过将nil分配给两个变量来破坏其中两个强引用(包括原始引用),则会保留一个强引用,并且Person实例不会被释放:

reference1 = nil
reference2 = nil

直到第三个也是最后一个强引用被破坏,ARC才会取消分配Person实例,这时您显然不再使用Person实例:

reference3 = nil
// Prints "John Appleseed is being deinitialized"

ARC in Action的所有代码和编写都来自Apple's documentation