嗨,我通常创建另一个类的对象。如果这将在自动释放池中,你能告诉我吗?或者我们应该手动释放它。
问问题
116 次
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 回答