代码之家  ›  专栏  ›  技术社区  ›  yehnan

我应该释放NSFileManager的copyI的NSError对象吗temAtPath:路径:错误:?

  •  3
  • yehnan  · 技术社区  · 15 年前

    - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error
    

    如果发生错误,第三个参数 返回时将包含一个描述问题的NSError对象。

    问题:我需要发布它吗?

    还有一些其他的方法,比如这个 (字符串**) ,

    NSPropertyListSerialization +(NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
    

    ---回答

    正如安德斯所说,答案是“不”释放。

    我很困惑,因为类NSPropertyListSerialization有一个方法

    + (NSData *)dataFromPropertyList:(id)plist format:(NSPropertyListFormat)format errorDescription:(NSString **)errorString
    

    文件上说,如果不是零,我应该释放第三个论点。但是它被弃用了,取而代之的是

    + (NSData *)dataWithPropertyList:(id)plist format:(NSPropertyListFormat)format options:(NSPropertyListWriteOptions)opt error:(NSError **)error
    

    论点是 (N错误**) 现在。不需要像其他类似的方法一样发布。所以一般的内存管理规则是不需要释放这种参数。

    ---参考文件

    在苹果的 Advanced Memory Management Programming Guide

    当您调用这些方法中的任何一个时,您都不会创建NSError对象,因此您不拥有它。

    2 回复  |  直到 13 年前
        1
  •  5
  •   AndersK    15 年前

    编辑:今天好像不会拼写

        2
  •  1
  •   Töre Çağrı Uyar    14 年前
    [NSPropertyListSerialization propertyListFromData:(NSData *) mutabilityOption:(NSPropertyListMutabilityOptions) format:(NSPropertyListFormat *) errorDescription:(NSString **)]
    

    如果你在处理这样的事情

    (NSString **)
    

    然后您应该检查清楚说明是否需要发布它的文档。如果文档中没有任何关于释放返回对象的内容,比如

    - (BOOL)copyItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error