如何在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
答案 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便不会取消分配该实例。
以下是自动引用计数工作方式的示例。该示例从一个简单的类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。