Я новичок в объективе-c, и я пытаюсь понять управление памятью, чтобы все было правильно.Когда действительно выпущен автореализованный объект?
После прочтения отличной
Memory Management Programming Guide for Cocoa яблоком моя единственная забота, когда фактически autoreleased объект выпущен в iphone/IPOD приложение. Мое понимание находится в конце цикла . Но что определяет цикл запуска в приложении?
Так что мне было интересно, правилен ли следующий фрагмент кода. Предполагают объект
@implementation Test
- (NSString *) functionA {
NSString *stringA;
stringA = [[[NSString alloc] initWithString:@"Hello"] autorelease]
return stringA;
}
- (NSString *) functionB {
NSString *stringB;
stringB = [self functionA];
return stringB;
}
- (NSString *) functionC {
NSString *stringC;
stringC = [self functionB];
return stringC;
}
- (void)viewDidLoad {
[super viewDidLoad];
NSString* p = [self functionC];
NSLog(@"string is %@",p);
}
@end
Действительно ли этот код действителен?
Из текста яблочного Я понимаю, что NSString вернулся из functionA действует в рамках functionB. Я не уверен, действительно ли это в functionC и в viewDidLoad.
Спасибо!
Правильно ли я понимаю, что если бы я не создал никаких пулов автоопределения, все автореализованные переменные останутся в памяти до тех пор, пока приложение не будет закрыто? – Burjua
Вид, системные рамки создают несколько пулов автоопределения для вас в верхней части стека основного потока в таких методах, как UIApplicationMain(). Однако, если вы запустили свой собственный поток и не создали пул, тогда да, эти объекты будут течь. В этом случае метод автоопределения регистрируется на консоли. –
Хорошо, но это странно, это обычная практика использования конструкторов, которые возвращают объекты с автореализацией и не выпускают их, но на самом деле это то же самое, что и утечка памяти (память распределяется до закрытия приложения). Или я что-то не понимаю? – Burjua