1

我从 Apple 文档或 swift 书中得到了这个

当实例被取消初始化时,您仍然可以访问实例内部的属性,并且可以在实例完全消失之前根据需要操作它们。

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

4

3 回答 3

2

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

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

于 2015-11-06T06:55:52.943 回答
2

deinit在释放之前被调用(当 retainCount 达到 0 时),所以你的所有属性仍然有效,你可以打印你的字符串。您不需要将属性显式设置为 nil,deinit因为这会自动发生。

话虽这么说,大多数类甚至不需要deinit实现

大多数时候,我用来deinit删除实例注册到的观察者,如果需要,发布任何通知,以及类似的事情。

于 2015-11-06T07:09:48.723 回答
1

据我所知,该deinit方法在实例被取消初始化之前被调用,给你一个最终的机会来做你需要做的任何事情(清理、关闭文件、终止网络连接等)。

文档说的是,当时deinit你的对象还没有被取消初始化(但很快就会),所以你仍然可以(最后一次)访问它的属性。

于 2015-11-06T06:54:17.253 回答