【发布时间】:2021-04-10 01:11:38
【问题描述】:
在iOS 10之前,直接使用Timer会产生Retain Cycle,所以我使用Runtime来构建代码,但是代码在构建时崩溃了。不知道空指针是从哪里产生的。
var time: Timer?
var target: NSObject?
target = NSObject()
let selector = #selector(timePrint)
if let method = class_getMethodImplementation(self.classForCoder, selector) {
let IMP = method_getImplementation(method)
let encodeing = method_getTypeEncoding(method)
class_addMethod(target?.classForCoder, selector, IMP, encodeing)
time = Timer.scheduledTimer(timeInterval: 2, target: target!, selector: selector, userInfo: nil, repeats: true)
}
【问题讨论】:
-
真的不需要
class_getMethodImplementation等所有这些。如果存在保留循环的危险,请打破它。 -
有一个基于闭包的 Timer API,你为什么不直接使用它呢?