可可记忆管理问题

use*_*064 1 c cocoa memory-management objective-c

我和一位朋友发生争执,他说我必须把autorelase放在这里:

NSURL *url = [[NSURL URLWithString:@"http://origin-www.metrolyrics.com/api/widgets/mac/seeker.php"] autorelease];
Run Code Online (Sandbox Code Playgroud)

但是当从NSURL类方法发送给我时,对象是不是自动自动释放?谢谢.

Dav*_*ong 5

这是规则:

如果调用返回对象的方法,则:

  • 开始于 new
  • 开始于 alloc
  • retain
  • 包含 copy

那么你负责释放(或自动释放)返回的对象.在只有这不会是这样的时间,如果文档,否则说.您还可以在头文件中看到该方法是使用NS_RETURNS_RETAINED宏注释的.(头文件计为文档)

记住这个的简单方法是"NARC"(new-alloc-retain-copy).

在您的示例中,由于URLWithString:不是以newalloc不包含copy,而不是retain,因此您不得释放返回的对象.这样做违反了内存管理准则,会导致您的应用程序崩溃(除非您在其他地方做了一些愚蠢的事情).