可以在阻止之前安全释放myArray
吗?
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];
答案 0 :(得分:4)
不,你不能在块之前释放数组,因为在你的块有机会保留它之前,在释放调用之后,数组中的对象和数组本身将无法使用。
您可以自动释放阵列,在这种情况下,释放将在函数退出后发生。
NSMutableArray *myArray = [NSMutableArray array];
[myArray addObject:@"a"];
[myArray addObject:@"b"];
CCCallBlock *block = [CCCallBlock actionWithBlock:^{
// print myArray contents to console
}];
[myNode runAction:block];
答案 1 :(得分:4)
要添加其他人所说的内容,如果没有autorelease
,则可以在创建块后释放数组,如果之后不再使用该数组。
NSMutableArray *myArray = [[NSMutableArray alloc] init];
[myArray addObject:@"a"];
[myArray addObject:@"b"];
CCCallBlock *block = [CCCallBlock actionWithBlock:^{
// print myArray contents to console
}];
[myArray release];
[myNode runAction:block];
块在创建时保留捕获的对象(数组)。
答案 2 :(得分:2)
没有。你会在块中保留一个悬空指针。