【问题标题】:NSData initWithContentsOfURL: does not return the original allocation?NSData initWithContentsOfURL: 不返回原来的分配?
【发布时间】:2011-05-23 21:25:21
【问题描述】:

NSDatainitWithContentsOfURL:documentation 中,它说:

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

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

【问题讨论】:

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


    【解决方案1】:

    有几个原因 - 类集群是最广为人知的:

    - (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 的结果),这在任何情况下都是一个好主意——即使没有明确说明记录在案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 2015-03-13
      相关资源
      最近更新 更多