您好我通常会创建另一个类的对象。如果这个会在自动发布池中,你可以打电话给我吗?或者我们应该手动发布它。
答案 0 :(得分:1)
如果您初始复制或新建它们,如果您使用分配自动发布,则必须取消分配它们,然后将自动释放它们
例如
Foo *foo = [[Foo alloc] init]; //you'll have release it somewhere yourself
和
Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased
答案 1 :(得分:1)
简单的情况是:如果你使用init,你有责任通过调用release或者调用autorelease来释放它。
e.g。
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的任何内容 - 您创建它,然后释放它。其他任何东西都将被自动释放。