objective-c - block 被释放时的回调

标签 objective-c c macos cocoa

我正在通过 Obj-C 运行时从 C 调用 Cocoa。

我能够使用这里的信息创建 block 对象[1],并将它们作为参数传递给 Cocoa 方法,这些方法根据需要保留它们,并在不再需要它们时释放它们。问题是,当 block 达到引用计数 0 并被释放时,我需要释放与该 block 关联的其他资源,因此我需要一种方法来设置发生这种情况时的回调。

对于普通对象,我只需子类化并重写 dealloc()。我听说 block 也是对象 - 是否有可以子类化的 Block 类?或者是否有其他方法可以在 block 的释放和/或解除分配上连接函数?

谢谢。

[1] http://clang.llvm.org/docs/Block-ABI-Apple.html

最佳答案

您可以使用Obj-C Associated Objects API将对象实例与 block 实例关联起来。当 block 被释放时,关联的对象(如果在其他地方没有访问它)将被释放。

使用关联对象的-dealloc方法来执行任何所需的资源清理等。

关于objective-c - block 被释放时的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23879435/

相关文章:

objective-c - 等到首选项 Pane 完全可见才能显示工作表?

ios - 启用所有异常断点后始终在 App 委托(delegate)中停止

objective-c - 如何从 UITableView 的所有选定单元格构建列表

objective-c - 如何在 UIImageView 上方显示一个不可见的交互按钮

c - 如何优化MAC的搜索

c - C中的递归子目录处理

objective-c - Class 的 isa 字段指向自身有什么意义呢?或者为什么 Xcode 费心显示这个?

c - 图表示——链表的链表

macos - 无法在 OSX 10.8 (Mountain Lion) 上使用颠覆

python - 如何在 mac 中安装 setuptools