Это вопрос из другого вопроса, мой вопрос касается использования сохранения/выпуска в main(). Из моего понимания в этом простом примере заявления сохранения/освобождения не нужны. НО в более сложных ситуациях лучше всего их добавить, так как это гарантирует, что экземпляр планеты не будет выпущен неожиданно.Управление памятью экземпляра объекта
+(Planet *) planet {
gPlanetCount++;
//return [[[Planet alloc] init] autorelease];
return [[[self alloc] init] autorelease]; // Better
}
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [[Planet planet] retain];
...
... some code
...
[outerMost release];
[pool drain];
return 0;
}
EDIT_001
Так что я мог бы лучше написать выше, как.
int main(int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Planet *outerMost;
outerMost = [Planet planet];
...
... some code
...
[pool drain];
return 0;
}
веселит комментарий ГАРИ
Код управления памятью представляется правильным, но вы можете добавить NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; как первая строка вашей основной функции. Вы, наверное, только забыли оставить это в своем фрагменте, когда вы сливаете бассейн в конце. –
Markus, я добавлю, что прямо сейчас для правильности, у меня это в моем коде, я просто забыл добавить его здесь, спасибо, что указал на это. – fuzzygoat
Я никогда не видел использования [self alloc] в методе уровня класса. Это работает? Я думал, что «я» зарезервировано для экземпляров классов. – rein