我是新的目标c 2.0。我碰到这个关键字autorelease,我只是需要一些澄清。我想知道是什么低于目标的代码的两行之间的差 - C 2.0(预先感谢):autorelease关键字
[UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
[[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];
我是新的目标c 2.0。我碰到这个关键字autorelease,我只是需要一些澄清。我想知道是什么低于目标的代码的两行之间的差 - C 2.0(预先感谢):autorelease关键字
[UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
[[UIImage imageWithData:[NSData dataWithContentsOfURL:url]] autorelease];
自动释放不是一个关键字,这是一个方法,这意味着接到呼叫此特定对象加入到当前的自动释放池(这通常是由可可创造自己在执行事件)和一次池被耗尽,这个对象将从内存中释放,所以你不必关心做一个明确的释放。
如果你没有这个调用,你必须在完成使用后自行释放这个对象。
通过使用autorelease你应该确保有一个自动释放池当前可用,就好像没有一个对象会泄漏并且它的内存不会被声明。通常,当你处理来自Cocoa组件的事件时,你可以依赖这个,否则你应该创建你自己的自动发布池。欲了解更多信息,请参阅the oficial Apple documentation about it。
而且,你不应该在你还没有ALLOC创建的对象调用自动释放,它是一个基于图书馆有自动释放对象初始化方法可可共同的行为,因此,创建一个对象的任何方法,但不包含alloc或copy通常意味着该对象已经被autoreleased并且不应该再次调用它。
第二行是不正确的。 +imageWithData:
已经返回一个自动释放对象。自动释放实际上就像是释放,除非您在对象超出范围之前仍拥有对象的所有权。阅读Memory Management Programming Guide获取更多信息。
另请注意,在ARC中,您将不被允许使用此方法,编译器会为您执行此操作。
谢谢你的解释。我使用xcode分析功能来确定第二行是不正确的。 –
感谢您的解释。我使用xcode分析功能来确定第二行是不正确的。 –