gpt4 book ai didi

ios - 防止释放函数中定义的对象

转载 作者:行者123 更新时间:2023-11-28 15:49:26 26 4
gpt4 key购买 nike

UIViewController 上的函数声明并初始化对类对象的引用。该类有一个弱委托(delegate)引用。已设置为 UIViewController。此函数完成执行后,对象将被释放并且不再调用委托(delegate)方法。

func registerDevice() {
prepareForLoading(true)

let notificationModel: NotificationModel = NotificationModel(delegate: self)

notificationModel.registerDevice()
}

有没有办法让这个对象在 UIViewController 死之前保持事件状态,而不需要全局类 ref。在 UIViewController 上。这很重要,因为此对象在任何其他功能或任何其他情况下都没有任何用处。

最佳答案

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

你说“这个对象在任何其他功能或任何其他情况下都没有任何用处。”,但这是不正确的;由于您的 View Controller 为此对象实现了委托(delegate)函数,并且您希望调用这些委托(delegate)函数,因此您的 View Controller 需要负责将模型对象保存在内存中。

它可以通过简单地声明一个实例属性来做到这一点

var notificationModel: NotificationModel?

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

func registerDevice() {
prepareForLoading(true)

self.notificationModel = NotificationModel(delegate: self)

self.notificationModel!.registerDevice()
}

现在模型对象的生命周期(至少)是 View Controller 的生命周期。

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

关于ios - 防止释放函数中定义的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519035/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com