Dysprosium

镝 (Dysprosium) 是 E-sites iOS 套件 的一部分。


运行时对象的释放辅助工具。
此库纯粹用于调试目的。

forthebadge forthebadge

Travis-ci

安装

##Swift PM

package.swift 依赖项

.package(url: "https://github.com/e-sites/dysprosium.git", from: "6.0.0"),

将其添加到您的应用程序/库目标中,将 "Dysprosium" 添加到您的 dependencies 中,例如像这样

.target(name: "BestExampleApp", dependencies: ["Dysprosium", "DysprosiumLogger"]),

实现

// AppDelegate


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // ...
    
    Dysprosium.shared.onDealloc { objects in 
        print("[INFO] Deallocated objects: \(objects)")
    }
    
    Dysprosium.shared.onExpectedDeallocation { object, message in 
        print("[WARNING] Expected deallocation of \(object): \(message)")
    }
}

记录释放

这样您可以轻松地查看哪些对象已被释放。

import Dysprosium

class SomeObject: DysprosiumCompatible {
    // ...
    
    deinit {
        deallocated()
    }
}

期望释放

UIViewController

大多数情况下,当一个 UIViewController 消失时,它应该被释放。
使用 expectDeallocation(),您可以监控它是否真的被释放。

import Dysprosium

class SomeViewController: UIViewController, DysprosiumCompatible {
    // ...
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        expectDeallocation()
    }
    
    deinit {
        deallocated()
    }
}

相关对象

如果一个对象被释放,但您需要检查一个底层对象是否也被释放

import Dysprosium

class SomeObject: DysprosiumCompatible {
    // ...
    
    let relatedObject: SomeObject

    deinit {
        relatedObject.expectDeallocation()
        deallocated()
    }
}

发布版本

像这样禁用镝 (Dysprosium)

Dysprosium.shared.isEnabled = false