在 Swift 中删除类的实例

Eva*_*n C 2 swift

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

del instance
Run Code Online (Sandbox Code Playgroud)

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

我在游戏中有一个子弹类,在与玩家碰撞后需要将其删除。示例代码可以是这样的

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

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

Geo*_*e_E 5

正如另一个问题中提到的,Swift 使用自动引用计数

\n\n

苹果是这样解释的:

\n\n
\n

ARC 跟踪当前有多少属性、常量和变量引用每个类实例。只要至少一个对该实例的活动引用仍然存在,ARC 就不会释放该实例。

\n
\n\n
\n\n

ARC 在行动

\n\n

Here\xe2\x80\x99 是自动引用计数如何工作的示例。此示例从一个名为 的简单类开始Person,它定义了一个名为 的存储常量属性name

\n\n
class Person {\n    let name: String\n\n    init(name: String) {\n        self.name = name\n        print("\\(name) is being initialized")\n    }\n\n    deinit {\n        print("\\(name) is being deinitialized")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

该类Person有一个初始化程序,用于设置instance\xe2\x80\x99sname属性并打印一条消息以指示初始化正在进行中。该类Person还有一个析构器,当该类的实例被释放时,它会打印一条消息。

\n\n

下一个代码片段定义了三个类型的变量,它们用于在后续代码片段中Person?设置对新实例的多个引用。Person由于这些变量是可选类型(Person?, not Person),因此它们会自动使用值 进行初始化nil,并且当前不引用Person实例。

\n\n
var reference1: Person?\nvar reference2: Person?\nvar reference3: Person?\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
reference1 = Person(name: "John Appleseed")\n// Prints "John Appleseed is being initialized"\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,该消息"John Appleseed is being initialized"是在您调用Personclass\xe2\x80\x99s 初始值设定项时打印的。这确认初始化已经发生。

\n\n

由于新Person实例已分配给reference1变量,因此现在存在reference1对新Person实例的强引用。由于至少有一个强引用,ARC 确保将其Person保存在内存中并且不会被释放。

\n\n

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

\n\n
reference2 = reference1\nreference3 = reference1\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在这个单一实例有三个强引用Person

\n\n

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

\n\n
reference1 = nil\nreference2 = nil\n
Run Code Online (Sandbox Code Playgroud)\n\n

ARC 不会释放该Person实例,直到第三个也是最后一个强引用被破坏,此时它\xe2\x80\x99 清楚地表明您不再使用该Person实例:

\n\n
reference3 = nil\n// Prints "John Appleseed is being deinitialized"\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

所有代码和编写均ARC in Action来自Apple 的文档

\n