我对如何在实例被取消初始化时操作实例内部的属性感到困惑?
Im confused on how can I manipulate the properties inside an instance when it gets deinitialized?
我从 Apple 文档或 swift 书中得到了这个
When an instance gets deinitialized, you still have access to the
properties inside the instance and can manipulate them as needed
before the instance totally goes away.
我很困惑,他们的意思是当我们例如使用 deinit()
方法中的实例 属性 进行一些数学运算时?或者说当我们打印 string
类型的 属性 时,它是特定实例的一部分,也来自 deinit
() 方法?
如果是这样,那么 deinit()
方法是在取消初始化时操作 属性 的唯一方法吗?
据我所知,deinit
方法在 实例被取消初始化之前 被调用,给你最后的机会做任何你需要做的事情(清理、关闭文件、终止网络连接等)。
文档说的是,在调用 deinit
时你的对象还没有被取消初始化(但很快就会),所以你仍然可以(最后一次)访问它的属性.
如果你有一个带有 var 的 swift class 你知道你必须在之后清理因为 ARC 不能释放它(例如 C 内存),你仍然可以在 deinit 中这样做.存储在属性中的指针仍然有效!
虽然它没有更多用处(好的,结束通知中心或 kvo 观察)因为无法保证何时调用 deist。仅在释放之前调用它 [无论何时]
deinit
在释放之前调用(当 retainCount 达到 0 时),因此您的所有属性仍然有效,您可以打印您的字符串。您不需要在 deinit
中将属性显式设置为 nil,因为这会自动发生。
也就是说,大多数 类 甚至不需要 deinit
实施
大部分时间我使用 deinit
删除实例注册到的观察者,post 任何需要的通知,诸如此类。
我从 Apple 文档或 swift 书中得到了这个
When an instance gets deinitialized, you still have access to the properties inside the instance and can manipulate them as needed before the instance totally goes away.
我很困惑,他们的意思是当我们例如使用 deinit()
方法中的实例 属性 进行一些数学运算时?或者说当我们打印 string
类型的 属性 时,它是特定实例的一部分,也来自 deinit
() 方法?
如果是这样,那么 deinit()
方法是在取消初始化时操作 属性 的唯一方法吗?
据我所知,deinit
方法在 实例被取消初始化之前 被调用,给你最后的机会做任何你需要做的事情(清理、关闭文件、终止网络连接等)。
文档说的是,在调用 deinit
时你的对象还没有被取消初始化(但很快就会),所以你仍然可以(最后一次)访问它的属性.
如果你有一个带有 var 的 swift class 你知道你必须在之后清理因为 ARC 不能释放它(例如 C 内存),你仍然可以在 deinit 中这样做.存储在属性中的指针仍然有效!
虽然它没有更多用处(好的,结束通知中心或 kvo 观察)因为无法保证何时调用 deist。仅在释放之前调用它 [无论何时]
deinit
在释放之前调用(当 retainCount 达到 0 时),因此您的所有属性仍然有效,您可以打印您的字符串。您不需要在 deinit
中将属性显式设置为 nil,因为这会自动发生。
也就是说,大多数 类 甚至不需要 deinit
实施
大部分时间我使用 deinit
删除实例注册到的观察者,post 任何需要的通知,诸如此类。