0

我在嵌套块中遇到 __block 变量问题。我的问题是,应该像下面这样的代码工作吗?

__block NSString* s = nil;
[self methodWithBlock:^
 {
    s = [self methodThatReturnsAnAutoreleasedString];
    [self methodWithBlock:^
     {
         [NSLog @"%d", s.length];
     }];
 }];

我假设保留了内部块s,但在我的代码中似乎并非如此。在内部块中访问时,我收到“发送到已释放实例的消息”。s如果我在分配它时保留 s ( s = [[self methodThatReturnsAnAutoreleasedString] retain];),它可以正常工作。

当然,这不是我的实际代码,它更复杂,但我只想知道那个最小的例子是否可以正常工作。如果是这样,我需要在其他地方寻找我的问题。

4

1 回答 1

3

(我假设您不使用 ARC。)从过渡到 ARC 发行说明

在手动引用计数模式下,__block id x;具有不保留的效果x

所以你的假设是错误的,块不保留smethodWithBlock如果异步工作,您必须保留它 。

于 2013-05-07T14:46:41.700 回答