2

Can myArray be safely released before the 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];
4

3 回答 3

4

不,您不能在块之前释放数组,因为数组内部的对象和数组本身在释放调用之后将不可用,在您的块有机会保留它之前。

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

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

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

[myNode runAction:block];
于 2012-06-05T19:28:20.673 回答
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];

该块在创建时保留捕获的对象(数组)。

于 2012-06-06T02:45:37.983 回答
2

不,您将在块中保留一个悬空指针。

于 2012-06-05T19:28:02.047 回答