-1

嗨,我通常创建另一个类的对象。如果这将在自动释放池中,你能告诉我吗?或者我们应该手动释放它。

4

2 回答 2

1

如果您初始化副本或新建它们,则必须解除分配它们如果您在分配中放置了自动租约,那么它们将被自动释放

例如

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

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased
于 2011-01-25T06:59:55.327 回答
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"];

这个对象已经在自动释放池中——不要释放它!

NSString *secondString = [myString copy];

此对象需要释放 - 它不是自动释放的。

经验法则:任何名称中带有 init、copy 或 new 的东西——你创造了它,你释放了它。其他任何内容都将自动发布。

于 2011-01-25T10:33:22.373 回答