Dealloc объекты другого класса - PullRequest
0 голосов
/ 25 января 2011

Привет, я вообще создаю объекты других классов. не могли бы вы сказать мне, если это будет в пуле автоматического выпуска? или мы должны отпустить его вручную.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Простой случай: если вы используете init, вы несете ответственность за его освобождение, либо вызывая release, либо вызывая autorelease.

например,

NSString *myString = [NSString alloc] init]; // You need to release this
...
[myString release]; // Now it's released - don't use it again!

или если вы собираетесьотдайте его кому-то еще

NSString *myString = [NSString alloc] init]; // This needs releasing
...
return [myString autorelease]; // You are finished with it but someone else might want it

Однако есть еще несколько случаев.

NSString *myString = [NSString stringWithFormat:@"hi"];

Этот объект уже находится в пуле автоматического выпуска - не отпускайте его!

NSString *secondString = [myString copy];

Этот объект нужно освободить - он не автоматически выпущен.

Правило большого пальца : что-нибудь с именем init, copy или new - вы сделалиэто, вы отпускаете это.Все остальное будет автоматически выпущено.

1 голос
/ 25 января 2011

если вы начнете копировать или создавать новые, вам придется их освободить, если вы добавите автозапуск с выделением, то они будут автоматически освобождены

например

Foo *foo = [[Foo alloc] init]; //you'll have release it somewhere yourself

И

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased
...