Поскольку вы звоните release
, вы должны использовать ручной подсчет ссылок. При ручном подсчете ссылок, когда вы сохраняете что-то в переменной, которая переживет область действия, вы должны сохранить ее, а затем, если впоследствии вы назначите что-то этой переменной или закончится время жизни этой переменной, вам нужно сначала освободить эту переменную.
Так что вы можете сделать это:
__block NSString* string;
dispatch_sync(dispatch_get_main_queue(), ^{
string = [[NSString stringWithString:@"I'm autoreleased!"] retain];
// or equivalently:
// string = [[NSString alloc] initWithString:@"I'm autoreleased!"];
});
NSLog(@"My string is: %@", string);
[string release];