关于Objective-C/Cocoa中工厂方法对象生存期的问题(保留与否......)

And*_*nan 3 iphone cocoa-touch objective-c

通过阅读SDK中的内存管理文档,我收集了工厂方法(静态构造方法)通常会为我保留对象并将其添加到自动释放池中?

这意味着只要池在我预期之前没有被释放,我就不需要保留和释放对象了吗?(应该在应用程序的末尾,对于main()中的默认自动释放池?)

这个问题:可可触摸问题.应保留[NSMutableArray数组]吗?似乎同意这一点.

但是,当我使用NSMutableArray arrayWithCapacity:方法时,我发现我必须保留数组或所有heck松散.

我确信这只是总计n00b-ness,或代码中其他地方的一个奇怪的错误,但如果有人能够解释我究竟是怎么会误解,我会非常感激.

谢谢!

更新:感谢您的回答.我想我现在已经有了!

Dar*_*ren 8

通过阅读SDK中的内存管理文档,我收集了工厂方法(静态构造方法)通常会为我保留对象并将其添加到自动释放池中?

是的,你不必担心释放任何方法返回的对象,除了alloc,init,new,和copy方法.

这意味着只要池在我预期之前没有被释放,我就不需要保留和释放对象了吗?

是.

(应该在应用程序的末尾,对于main()中的默认自动释放池?)

不可以.只有在你从任何方法或函数返回时才能依赖周围的对象.通常,当控制返回到运行循环时,自动释放池会被刷新.

如果您希望对象实例超越当前方法,则必须通过调用"retain"来获取它的所有权.然后,当您不再需要时,您还负责"释放"该实例.

在你的情况下,如果你想要你的NSMutableArray,你需要retain它.更好的是,使用[[NSMutableArray alloc] initWithCapacity: ];

请参阅实用内存管理