【问题标题】:NSURL property with "copy" attribute. Is it leaking?具有“复制”属性的 NSURL 属性。是不是漏水了?
【发布时间】:2012-03-30 16:32:34
【问题描述】:

我只是稍微清理一下我的代码,我发现函数中有几行我不确定它们是否会产生内存泄漏。 我会很感激任何想法。

提前致谢!

在下面的代码中,变量文件路径是一个 NSURL,文件名是一个定义为属性的 NSString 对象。定义属性设置为“复制”。 这是代码:

-(BOOL)isEqual:(id)object
{
    if ( self == object)
        return YES;

    if (!object || ![object isKindOfClass:[self class]]) 
        return NO;

    if ( ![[[self filepath] path] isEqual:[[object filepath] path]])
        return NO;

    if (![[self filename] isEqualToString:[object filename]])
        return NO;

    if (![[self filesize] isEqualToString:[object filesize]])
        return NO;

    if (![[[self filepath ] absoluteURL] isEqual:[[object filepath] absoluteURL]])
        return NO;

    if ( !([[[self filepath ] absoluteURL ] isFileURL ] && [[[object filepath] absoluteURL ] isFileURL ]))
        return NO;

    return YES;
}

据我了解,具有 copy 属性的属性将返回保留计数为 +1 的对象。这意味着,我应该在每个 if 语句上都有内存泄漏。 它是否正确?

【问题讨论】:

    标签: cocoa memory-management properties retain


    【解决方案1】:

    您的代码 sn-p 中没有任何内容表示泄漏。

    copy 属性意味着您在设置属性时保留一个保留计数为 1 的对象的副本。您不能简单地通过在代码中引用它来泄漏它(即使通过该属性的访问器)。

    另一方面,'filepath' 和 'filename' 应该在包含它们的对象的 -dealloc 方法中释放。不这样做(假设引用计数内存模式)导致泄漏。

    【讨论】:

    • 有趣!所以 (readonly, copy) 的设置是绝对没用的,对吧?我当然会在相应的 dealloc 方法中释放对象。感谢您的回答!
    • @guitarflow 您是否使用 Leaks 模块通过 Instruments 运行您的应用程序?
    • 我知道我可以做到。我的应用程序需要一些进一步的工作才能再次运行;-) 所以我认为在这里询问将是最简单的选择。但是感谢您的提示!
    • @guitarflow 祝你好运,我希望你能启动并运行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2011-12-19
    • 1970-01-01
    • 2016-04-16
    • 2020-02-14
    • 1970-01-01
    • 2013-06-13
    相关资源
    最近更新 更多