【问题标题】:Does [bytes] automatically release the memory without having to use free?[bytes] 会自动释放内存而无需使用 free 吗?
【发布时间】:2017-02-24 22:22:59
【问题描述】:

我有一个 C API 调用如下:

- (NSData*)getFileContents {
     NSData *fileContents;

     //do something 

     return fileContents;
}

-(void*) manipulateFile {
    UInt8 *data = (UInt8*) [[self getFileContents] bytes];
    UInt32 dataLength = (UInt32)[[self getFileContents] length]; 

     //call some C API with the data and dataLength value          

}

现在我的问题是因为我不必明确调用free(data) 我想知道bytes 调用的幕后发生了什么

【问题讨论】:

    标签: objective-c memory-management free


    【解决方案1】:

    问问自己 - 你有没有明确地打电话给malloc 和朋友? NSData bytes 的文档是否声明指针的所有权已传递给调用者?

    既然这两个问题的答案都是否定的,那么否定,你不要(也绝对不能)打电话给free

    您更关心的是指针的有效生命周期。在NSData 对象的生命周期之外不要尝试使用它。

    【讨论】:

    • 当我的程序崩溃时,我想了很多(哈哈)。我只是想知道为什么会这样,以及幕后发生了什么。抱歉应该说清楚
    • bytes 属性向您传递了一个属于NSData 实例的指针。 NSData 实例拥有该内存。它对此负责。它不是给你一个副本。因此,由于您不拥有该指针,因此您不能释放它。
    猜你喜欢
    • 2011-05-31
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2022-01-05
    相关资源
    最近更新 更多