您可以創建一個基於特定標準進行自我銷燬的協議。下面是使用類的示例
class SelfDestructorClass
{
var calledTimes = 0
let MAX_TIMES=5
static var instancesOfSelf = [SelfDestructorClass]()
init()
{
SelfDestructorClass.instancesOfSelf.append(self)
}
class func destroySelf(object:SelfDestructorClass)
{
instancesOfSelf = instancesOfSelf.filter {
$0 !== object
}
}
deinit {
print("Destroying instance of SelfDestructorClass")
}
func call() {
calledTimes += 1
print("called \(calledTimes)")
if calledTimes > MAX_TIMES {
SelfDestructorClass.destroySelf(self)
}
}
}
您可以從此類派生您的類,然後在這些對象上調用call()。基本思想是僅在一個地方擁有對象的所有權,然後在滿足標準時拆除所有權。在這種情況下,所有權是一個靜態數組,而分離將其從數組中移除。需要注意的一件重要事情是,無論使用哪個對象,都必須使用弱引用。
E.g.
class ViewController: UIViewController {
weak var selfDestructingObject = SelfDestructorClass()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func countDown(sender:AnyObject?)
{
if selfDestructingObject != nil {
selfDestructingObject!.call()
} else {
print("object no longer exists")
}
}
}
它內置作爲弧的一部分。 self.deinit將銷燬一個對象。但只要確保它不是一個當前顯示的viewController,因爲這可能會導致問題。 – NSGangster
我想你可能指的是[這個線程](http://stackoverflow.com/questions/26091862/how-to-call-deinit-in-swift)? – bipartite
hi Matthew self.deinit不允許在類定義中調用。 –