当实例被取消初始化时,我对如何操作实例内部的属性感到困惑



我从苹果文档或swift书籍中得到了这个

当实例被取消初始化时,您仍然可以访问属性,并可以根据需要对其进行操作在这个例子完全消失之前。

我很困惑,他们的意思是,例如,当我们使用deinit()方法中的instance属性进行一些数学运算时?或者说,当我们打印string类型的属性时,该属性是特定实例的一部分,也是来自deinit()方法?如果是,那么deinit()方法是在属性被取消初始化时操作该属性的唯一方法吗?

如果你有一个swift类,它有一个var,你知道你必须在之后清理,因为ARC无法释放它(例如C内存),你仍然可以在deinit中这样做。存储在属性中的指针仍然有效!

不过,它对更多的事情没有用处(好吧,用通知中心或kvo结束观察),因为无法保证何时调用deist。只是在解除分配之前调用它[无论何时]

deinit在解除分配之前(retainCount达到0时)被调用,因此您的所有属性仍然有效,并且您可以打印字符串。您不需要在deinit中将属性显式设置为nil,因为这是自动发生的。

话虽如此,大多数类甚至不需要deinit实现的

大多数时候,我使用deinit来删除实例注册到的observer,在需要时发布任何通知,等等。

据我所知,deinit方法在实例被取消初始化之前被调用,为您提供了执行任何需要执行的操作(清理、关闭文件、终止网络连接等)的最后机会。

文档中说,在调用deinit时,您的对象尚未被解除初始化(但很快就会被解除初始化),因此您仍然可以(最后一次)访问其属性。

相关内容

  • 没有找到相关文章

最新更新