2011-01-25 93 views
-1

嗨,我通常创建另一个类的对象。如果这将会在自动释放池中,请你给我打电话吗?或者我们应该手动释放它。另一个类的Dealloc对象

+2

您需要显示一些代码或更好地解释您的问题,或两者兼而有之。你创建的一些对象可能是自动释放的,其他的可能不是...... – 2011-01-25 06:55:59

回答

1

如果初始化复制或新的你有,如果你把一个autorlease与分配那么他们将被自动释放

例如取消分配这些

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

而且

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

简单的情况是:如果你使用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"]; 

此对象已在autorelease池中 - 不要释放它!

NSString *secondString = [myString copy]; 

该对象需要释放 - 这是自动释放。

经验法则:任何与名称中的init,copy或new相关的东西 - 您制作它,您释放它。其他任何东西都会被自动释放。

+1

经验法则不是很正确:它不是`init`,而是`alloc`,它要求释放,另外它缺少`new`。 – danyowdee 2011-01-28 16:25:07