2011-01-25 2 views
-1

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

+2

Вам нужно показать код или объяснить свой вопрос лучше, или и то, и другое. Некоторые объекты, которые вы создаете, могут быть автореализованы, другие могут не ... –

ответ

1

, если вы инициализации копировать новый или их вы должны освободить их, если положить autorlease с распределением, то они будут autoreleased

, например

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

И

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

Простой случай: если вы используете init, вы несете ответственность за его освобождение либо путем вызова выпуска, либо путем вызова 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]; 

Этот объект нуждается в освобождении - это не autoreleased.

Правило большого размера: Что-нибудь с init, копией или новым именем - вы сделали это, вы отпустите его. Все остальное будет автореализовано.

+1

Правило большого пальца не совсем корректно: это не 'init', а' alloc', требующий освобождения, кроме того, ему не хватает 'new'. – danyowdee

+0

Blast, я всегда забываю 'new' :(Я отредактировал свой ответ, спасибо! – deanWombourne

Смежные вопросы