objective-c - 我可以释放在 block 运行之前使用它的 block 外部创建的对象吗?

标签 objective-c memory-management objective-c-blocks

myArray 能否在 block 之前安全释放?

NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray addObject:@"a"];
[myArray addObject:@"b"];

// releasing here causes an invalid object to be used inside the block?
[myArray release];

CCCallBlock *block = [CCCallBlock actionWithBlock:^{
    // print myArray contents to console
}];

[myNode runAction:block];

最佳答案

不,您不能在 block 之前释放数组,因为在调用释放之后,在您的 block 有机会保留它之前,数组中的对象和数组本身将无法使用。

您可以使您的数组自动释放,在这种情况下释放将在函数退出后发生。

NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:@"a"];
[myArray addObject:@"b"];

CCCallBlock *block = [CCCallBlock actionWithBlock:^{
    // print myArray contents to console
}];

[myNode runAction:block];

关于objective-c - 我可以释放在 block 运行之前使用它的 block 外部创建的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903577/

相关文章:

ios - 在完成 block 中访问 super 的正确方法

iphone - TTRequestLoader 最大内容大小问题

java - 字符串和内存管理

ios - 阻止卡住我的应用程序

java - Java中的突发内存使用

c++ - 将 C 字符串和 vector 发送到 MurmurHash 会产生不一致的结果

ios - 阻止另一端不被调用

objective-c - 基本的 Objective C 语法问题

iphone - 设备锁定时响应事件

iphone - 如何控制分组表格 View 单元格中图像的位置?