繁体   English   中英

我对实例初始化后如何处理实例内部的属性感到困惑?

[英]Im confused on how can I manipulate the properties inside an instance when it gets deinitialized?

我从Apple文档或快速书中获得了此信息

实例取消初始化后,您仍然可以访问实例内部的属性,并且可以在实例完全消失之前根据需要对其进行操作。

我很困惑,例如,当我们使用deinit()方法中的instances属性执行一些数学deinit()时,它们是什么意思? 还是说当我们打印来自特定实例一部分的string类型的属性时,也来自deinit ()方法? 如果是这样,那么在deinit()属性时, deinit()方法是操纵属性的唯一方法吗?

如果您有一个带有aa var的swift类,那么您知道必须进行清理,因为ARC无法释放它(例如C内存),您仍然可以在deinit中执行此操作。 存储在属性中的指针仍然有效!

但是,它没有更多用处(可以通过通知中心或kvo进行最终观察),因为不能保证何时调用deist。 仅在释放之前(无论何时)都被调用

deinit被释放之前右称为(当retainCount到达0),因此所有的属性仍然有效,就可以打印字符串。 您无需在deinit中将属性显式设置为nil,因为这会自动发生。

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

大多数时候,我使用deinit删除实例注册到的观察者,并在需要时发布任何通知,诸如此类。

据我所知, deinit方法在实例被deinit 之前被调用,从而为您提供了最终的机会来执行您需要做的任何事情(清理,关闭文件,终止网络连接等)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM