Objective-c - NSData initWithContentsOfFile 与 dataWithContentsOfFile

标签 objective-c nsdata

这两个 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/

相关文章:

ios - Objective-C 命名 UILabel iOS

ios - 如何使用 RestKit 将嵌套的 JSON 对象存储到核心数据中

objective-c - NSData 内存未释放 - ARC

iphone - NSData 到 NSString 的转换问题!

objective-c - 在 Xcode 中使用 NSURLConnection 发送 JSON 数据

ios - 阻止 UIWebView 上的交互,同时保持其滚动功能

objective-c - Objective-C 数据结构的近似运行时间比较

iphone - 将带有 exif 的原始图像从 ALAsset 对象写入文档目录文件夹

php - 将 zip 文件从 ios 应用程序发送到 php 服务器

ios - 在 iOS 中,如何从子 ViewController 获取图像?