беспокойство; когда будет выпущен объект авто-релиза?
NSString *myString= [NSString stringWithFormat: @"%@", stringVariable];
myString зависит от stringVariable, всякий раз, когда stringVariable освобождает myString, немедленно освобождается.
NSString *myString= [NSString stringWithString: @"stringVariable"];
На практике наблюдается, что myString может быть выпущена сразу после завершения метода.
Теперь, если вы измените свой код и используете NSAutoReleasePool
- (void)method {
NSAutoreleasePool pool = [[NSAutoreleasePool alloc] init];
NSString *string= [NSString string]; //will be autoreleased
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//very very lengthy operation...
// string will be released here
[pool release];
NSLog(@"%@", string); // it is not safe?
});
}
Объекты автоматического выпуска, выпущенные, когда пул автоматического выпуска выпускает, в котором они существуют, или когда объекты выпускают, от которого они зависят.
Теперь, если вы используете метод в потоке, вы должны использовать пул автоматического освобождения внутри него.
- (void)method {
NSAutoreleasePool pool = [[NSAutoreleasePool alloc] init];
// lengthy operations ...
[pool release];
}