仪器是一个累赘的工具,它的内存泄漏检查往往找不到保留周期。示例:委托模式(委托不是弱的)肯定会创建一个保留周期,但不知何故泄漏不会出现。一个保持循环肯定是一个漏洞吗?寻找一个仪器之外的日志机制-代码,我可以嵌入到我的项目,以检测这一点。
发布于 2016-07-10 01:18:08
尝试了这个手动记录器,您可以对正在分析的类的init进行如下操作:
struct WeakStruct {
weak var weakObject: AnyObject?
let objectName: String
}
public class RetainCycleLogger {
var weakStructs = [WeakStruct]()
public static let sharedInstance = RetainCycleLogger()
public func addObject(object: AnyObject) {
weakStructs.append(WeakStruct(weakObject: object, objectName: classNameAsString(object)))
}
func count(object: AnyObject) -> Int {
let classname = classNameAsString(object)
return weakStructs.filter({$0.objectName == classname}).flatMap({$0.weakObject}).count
}
func classNameAsString(obj: Any) -> String {
return String(reflecting: obj)
}
public func printAllCounts() {
let classes = weakStructs.filter({$0.weakObject != nil}).map({$0.objectName})
let uniqueClasses: [String] = Array(Set(classes))
for className in uniqueClasses {
print("---- Class: \(className) \(classes.filter({$0 == className}).count)")
}
}
}https://stackoverflow.com/questions/38235236
复制相似问题