UIViewController上的函数声明并初始化对类对象的引用。那个班有一个弱代表裁判。已经设置为UIViewController。在此函数完成执行后,对象将被释放,并且不再调用委托方法。
func registerDevice() {
prepareForLoading(true)
let notificationModel: NotificationModel = NotificationModel(delegate: self)
notificationModel.registerDevice()
}
有没有办法让这个对象保持活着,直到UIViewController死掉,而没有全局类ref。在UIViewController上。这很重要,因为在任何其他功能或任何其他情况下,此对象都没有任何用途。
答案 0 :(得分:1)
由于您在notificationModel
函数的范围内声明registerDevice
为常量,因此在没有任何其他强引用的情况下,该对象的生命周期仅限于该函数。
你说“在任何其他功能或任何其他情况下,此对象没有任何用处。”,但这不正确;由于视图控制器为此对象实现委托函数,并且您希望调用这些委托函数,因此视图控制器需要负责将模型对象保留在内存中。
只需声明实例属性
即可实现此目的var notificationModel: NotificationModel?
并将对象分配给函数中的该属性:
func registerDevice() {
prepareForLoading(true)
self.notificationModel = NotificationModel(delegate: self)
self.notificationModel!.registerDevice()
}
现在,模型对象的生命周期(至少)是视图控制器的生命周期。
注意,此属性不是类属性或全局属性;它的范围限定为特定的View Controller实例。