NSData initWithContentsOfURL:不返回原始分配?

时间:2011-05-23 21:25:21

标签: objective-c memory-leaks memory-management nsdata foundation

NSData initWithContentsOfURL:的{​​{3}}中,它说:

  

返回的对象可能与原始接收者不同。

这有什么影响?这似乎意味着标准的“alloc / init”行可能会泄漏内存。

1 个答案:

答案 0 :(得分:4)

有几个原因 - 类集群是最受公认的:

- (id)initWithContentsOfURL:(NSURL *)url
{
    self = [super init];
    if (self != nil) {
        NSData * result =
           [[NSDataClassClusterSpecialization alloc] initWithContentsOfURL:url];
        [self release];
        return result;
    }
    return self;
}

使用此表格不会引入泄漏。

它只是意味着您应该只使用alloc + init调用的结果(而不是保留alloc的结果),这在任何情况下都是个好主意 - 即使没有明确记录。