Swift:如何通过 reference/pointer 消除未知对象?
Swift: How do I nil an unknown object by reference/pointer?
我正在尝试弄清楚如何在不知道对象类型的情况下 deinit/dealloc/nil 将一个对象发送到一个函数中。函数 KillObject
的目的是简单地将传入的对象置为 nil —— 因此从外部传入的对象应该为 nil。
public class MyClass
{
init() { println("MyClass init") }
deinit { println("MyClass deinit") }
func sayHello() -> String { return "MyClass says Hello" }
}
var obj1:MyClass? = MyClass()
obj1?.sayHello()
public func KillObject(inout obj:AnyObject?)
{
obj = nil
}
var any:AnyObject? = obj1 as AnyObject?
KillObject(&any) // want `obj1`to be sent in
obj1 // is still an object, should be nil
any // is nil, correct
这就是这里的内容:
您有一个指向 MyClass
和 obj1
的指针。然后,您创建另一个指向 obj1
指向的同一实例的指针,并将其存储为 any
。然后,你设置 any
为 nil,它就会为 nil。但是您没有更改 obj1
,它指向它设置的 MyClass
实例。
这是您可以做到的一种方法。
public func KillObject<T>(inout obj:T?)
{
obj = nil
}
KillObject(&obj1)
对象Type必须符合NilLiteralConvertiable类型
public func KillObject(inout obj:NilLiteralConvertible) {
obj = nil
}
KillObject(&test)
obj1指的是MyClass的一个对象。 obj1 本身不是对象,而是对内存中对象的引用。
任何,当分配给 obj1 时,也引用与 obj1 引用的 MyClass 相同的对象。
当您将 nil 分配给 any 时,它指的是 nil,但 obj1 仍然持有对仍在内存中的原始对象的引用。将 nil 分配给 any 不会使内存中的真实对象神奇地消失。
据我所知,对象在 Swift 中被引用计数。因此,如果仍然有至少一个引用对象的变量,它将不会被取消分配。换句话说,在所有引用的变量都设置为 nil 或超出范围之前,对象不会从内存中释放。
我正在尝试弄清楚如何在不知道对象类型的情况下 deinit/dealloc/nil 将一个对象发送到一个函数中。函数 KillObject
的目的是简单地将传入的对象置为 nil —— 因此从外部传入的对象应该为 nil。
public class MyClass
{
init() { println("MyClass init") }
deinit { println("MyClass deinit") }
func sayHello() -> String { return "MyClass says Hello" }
}
var obj1:MyClass? = MyClass()
obj1?.sayHello()
public func KillObject(inout obj:AnyObject?)
{
obj = nil
}
var any:AnyObject? = obj1 as AnyObject?
KillObject(&any) // want `obj1`to be sent in
obj1 // is still an object, should be nil
any // is nil, correct
这就是这里的内容:
您有一个指向 MyClass
和 obj1
的指针。然后,您创建另一个指向 obj1
指向的同一实例的指针,并将其存储为 any
。然后,你设置 any
为 nil,它就会为 nil。但是您没有更改 obj1
,它指向它设置的 MyClass
实例。
这是您可以做到的一种方法。
public func KillObject<T>(inout obj:T?)
{
obj = nil
}
KillObject(&obj1)
对象Type必须符合NilLiteralConvertiable类型
public func KillObject(inout obj:NilLiteralConvertible) {
obj = nil
}
KillObject(&test)
obj1指的是MyClass的一个对象。 obj1 本身不是对象,而是对内存中对象的引用。
任何,当分配给 obj1 时,也引用与 obj1 引用的 MyClass 相同的对象。
当您将 nil 分配给 any 时,它指的是 nil,但 obj1 仍然持有对仍在内存中的原始对象的引用。将 nil 分配给 any 不会使内存中的真实对象神奇地消失。
据我所知,对象在 Swift 中被引用计数。因此,如果仍然有至少一个引用对象的变量,它将不会被取消分配。换句话说,在所有引用的变量都设置为 nil 或超出范围之前,对象不会从内存中释放。