这两个 objective-c 语句有什么区别?
NSData *documentBytes = [NSData dataWithContentsOfFile:filePath];
与此相对:
NSData *documentBytes = [NSData initWithContentsOfFile:filePath];
从 Apple 的 NSData Class Reference 页面,它对每个
dataWithContentsOfFile - 通过从给定路径指定的文件中读取每个字节来创建并返回数据对象。
initWithContentsOfFile - 返回通过从给定路径指定的文件中读取数据初始化的数据对象。
对我来说,它们在功能上似乎是等同的,但我非常怀疑它们在所有情况下都做同样的事情,对吧?
提前致谢... -埃尔金
最佳答案
当你使用init
时,你总是必须使用alloc
,像这样:
NSData *documentBytes = [[NSData alloc] initWithContentsOfFile:filePath];
这将返回一个保留计数为 1 的 NSData 对象,您现在拥有该引用并负责释放它。
使用dataWithContentsOfFile
时
NSData *documentBytes = [NSData dataWithContentsOfFile:filePath];
你得到一个自动释放的 NSData 对象。你可以使用它而忘记它,自动释放池会处理它。如果你想存储它,你必须保留它。
当然,当您使用 ARC 时,您可以忘记所有这些 ;-),方法本质上是相同的。
关于Objective-c - NSData initWithContentsOfFile 与 dataWithContentsOfFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16744692/