我在嵌套塊中的__block變量有問題。我的問題是,應該像下面的代碼工作?__block變量嵌套塊的行爲
__block NSString* s = nil;
[self methodWithBlock:^
{
s = [self methodThatReturnsAnAutoreleasedString];
[self methodWithBlock:^
{
[NSLog @"%d", s.length];
}];
}];
我假設內部塊保留s
但這似乎並沒有在我的代碼的情況。當在內部塊中訪問s
時,我得到一個「消息發送到解除分配的實例」。如果我在分配時保留s(s = [[self methodThatReturnsAnAutoreleasedString] retain];
),它可以正常工作。
當然,這不是我的實際代碼,這是更復雜的,但我只是想知道這個最小的例子應該工作正常。如果是這樣,我需要在其他地方尋找我的問題。
「如果我保留s時,我分配它(...),它工作正常。」是的,那就是你需要做的。另請注意,如果您在完成任務後未發佈它,它將會泄漏。 – newacct 2013-05-07 21:46:18