防止释放在函数

时间:2017-02-28 21:26:20

标签: ios swift swift3

UIViewController上的函数声明并初始化对类对象的引用。那个班有一个弱代表裁判。已经设置为UIViewController。在此函数完成执行后,对象将被释放,并且不再调用委托方法。

func registerDevice() {
    prepareForLoading(true)

    let notificationModel: NotificationModel = NotificationModel(delegate: self)

    notificationModel.registerDevice()
}

有没有办法让这个对象保持活着,直到UIViewController死掉,而没有全局类ref。在UIViewController上。这很重要,因为在任何其他功能或任何其他情况下,此对象都没有任何用途。

1 个答案:

答案 0 :(得分:1)

由于您在notificationModel函数的范围内声明registerDevice为常量,因此在没有任何其他强引用的情况下,该对象的生命周期仅限于该函数。

你说“在任何其他功能或任何其他情况下,此对象没有任何用处。”,但这不正确;由于视图控制器为此对象实现委托函数,并且您希望调用这些委托函数,因此视图控制器需要负责将模型对象保留在内存中。

只需声明实例属性

即可实现此目的
var notificationModel: NotificationModel?

并将对象分配给函数中的该属性:

func registerDevice() {
    prepareForLoading(true)

    self.notificationModel = NotificationModel(delegate: self)

    self.notificationModel!.registerDevice()
}

现在,模型对象的生命周期(至少)是视图控制器的生命周期。

注意,此属性不是类属性或全局属性;它的范围限定为特定的View Controller实例。