Objective-c - NSData initWithContentsOfFile 与 dataWithContentsOfFile

Erg*_*gin 3 objective-c nsdata

这两个 Objective-C 语句有什么区别?

NSData *documentBytes = [NSData dataWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)

与此相比:

NSData *documentBytes = [NSData initWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)

在 Apple 的 NSData 类参考页面中,它对每个类进行了以下说明

dataWithContentsOfFile - 通过读取给定路径指定的文件中的每个字节来创建并返回数据对象。

initWithContentsOfFile - 返回一个数据对象,该数据对象通过从给定路径指定的文件中读入数据来初始化。

对我来说,这些看起来功能相同,但我非常怀疑它们在所有情况下都做同样的事情,对吗?

预先感谢...-埃尔金

Mar*_*cel 5

当你使用 时init,你总是必须使用alloc,如下所示:

NSData *documentBytes = [[NSData alloc] initWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)

这将返回一个保留计数为 1 的 NSData 对象,您现在拥有该引用并负责释放它。

使用时dataWithContentsOfFile

NSData *documentBytes = [NSData dataWithContentsOfFile:filePath];
Run Code Online (Sandbox Code Playgroud)

你会得到一个自动释放的 NSData 对象。您可以使用它并忘记它,自动释放池会处理它。如果你想存储它,你就必须保留它。

当然,当您使用ARC时,您可以忘记所有这些;-),方法本质上是相同的。