ios - 释放类对象时使用 block 进行内存管理

标签 ios block memory-management

假设执行了如下所示的示例 block 。

[testBlock testPerformWithBlock:^(BOOL finished) {
    if (finished) {
       self.textField.text = @"Finished";
       NSLog(@"Edited to add an textfield update inside block");

    }
}];

如果我在 block 返回 BOOL 值之前弹出包含对象 testBlock 的 View Controller ,将会发生什么。对象会被正确释放吗?

最佳答案

block 中的所有内容都会保留,直到 block 从内存中释放。如果对象 testBlock 仍在执行 testPerformWithBlock 并且 block 仍然存在,则 block 内的所有内容都会保留。

你只是在里面做一个 NSLog,所以什么都不会改变。

但是,如果您这样做:

if (finished) {
    [self doSomething];
}

self 正在被使用,它将被保留,所以如果你将 block 存储在某个 ivar 中的某个地方,请小心

关于ios - 释放类对象时使用 block 进行内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14728334/

相关文章:

ios - 输出未生成 AudioConverterFillComplexBuffer 以从 AAC 转换为 PCM?

iphone - 使用 TTSectionedDataSource 将图像和标题文本添加到 Three20 表部分

lisp - 选择折线时 Autocad 错误 "error: bad arguement type: lselsetp nil"

ios - 仅在准备好时才返回方法?

python - 使用memory_profiler在python中进行内存管理

java - 如何减少Android中的内存使用?

memory-management - 如何分区和使用与 Rust 一起分配的堆内存?

iphone - 向 UIDatePicker 添加值

iphone - 应用程序试图以模态方式呈现 Split View Controller (我的应用程序中没有 Split View)

java - 当我打开另一个 JDialog 时阻止另一个 JDialog