[这是内存管理澄清/问题]
只要我使用new或alloc启动名称,这是否可以正确?
e.g。
+ (NSMutableArray*) newArrayFromDB
{
NSMutableArray* myArray = [[NSMutableArray alloc] init];
//stuff to populate array
return myArray;
}
然后来电者将致电:
NSMutableArray* test = [ThatClass newArrayFromDB];
//use test
[test release];
静态分析器似乎认为它没问题......但我想要第二个意见......
感谢您的反馈......
答案 0 :(得分:4)
是的,您所做的是正确的 - 您正在遵循object ownership policy 中的规则。
我可能会质疑的唯一一点是I don't want to use AutoRelease because I want it freed from memory as soon as caller is done
。默认的自动释放池每次都通过主运行循环耗尽,因此在大多数情况下,内存将很快释放。而且,如果调用者需要尽快强制释放,它总是可以手动分配/排出自动释放池。当然,一种方法是创建两种便捷方法+ newArrayFromDB:
和+arrayFromDB
;一个自动释放,一个不自动释放。
答案 1 :(得分:1)
是的,这是做到这一点的方法。
我可能会使用“创建”这个词来表示来电者拥有所有权,但我猜也是新的。
P.S。使用allocWithZone:如果你想要提高速度,那么NULL比alloc更快。