Я использую ARC, и я знаю, что autoreleasepool отправляет релиз всем элементам внутри него. Рассмотрим следующий пример.что делает @autoreleasepool делать?
-(NSString*)someMethod{
NSString *[email protected]"sample text inside string 1"; // string1 add to main autorelease pool
NSString *string2=[[NSString alloc] init]; // string2 retain count is 1
[email protected]"sample text inside string 2"; // just assigning
return string1;
}
-(void)viewDidLoad{
NSString *returnedString=[self someMethod];
}
1. так что мой вопрос, как я полностью освободить string2 в SomeMethod?
2. Как полностью освободить строку1 из метода viewDidLoad полностью?
Примечание: Я использую ARC
, если я использую @autoreleasepool в SomeMethod, то я думаю, что он будет уничтожать как string1 и string2. не так ли?
А что будет эффект от использования @autoreleasepool в SomeMethod
-(NSString*)someMethod{
@autoreleasepool{
NSString *[email protected]"sample text inside string 1"; // string1 add to main autorelease pool
NSString *string2=[[NSString alloc] init]; // string2 retain count is 1
[email protected]"sample text inside string 2"; // just assigning
}
return string1;
}
Стоит отметить, что во всех сотнях вопросов, подобных этому, никакой полезный пример никогда не может быть выполнен с использованием литерала. Они являются константами времени компиляции и, как таковые, не обрабатываются стандартным управлением памятью. – jrturton
Возможный дубликат [Objective-C: Почему автореферат (@autoreleasepool) по-прежнему необходим с ARC?] (Http://stackoverflow.com/questions/9086913/objective-c-why-is-autorelease-autoreleasepool-still-needed -with-arc) – Igor