objective-c - 为什么我不必释放这些对象?

标签 objective-c iphone cocoa-touch memory-management uikit

这是一个示例代码,其中仅释放“string”对象。

NSString *nameOfFile = ... ;
NSError *error;
NSString *string = [[NSString alloc] initWithContentsOfFile:nameOfFile encoding:NSUTF8StringEncoding error:&error];
if (string == nil) {
    // handle error
}
[string release];

我明白为什么错误对象没有被释放。这是因为这里的方法没有使用“new”或“alloc”方法创建该错误对象。相反,这个是通过引用返回的,因此 initWithContentsOfFile 方法负责该内存。但是 nameOfFile 对象呢?他们为什么不释放它?它不是通过引用返回的...?

最佳答案

类似于为什么不需要释放error ,你也不需要释放nameOfFile 。在 Objective-C 中,如果将字符串声明为 NSString *temp = @"Hello"它被视为字符串常量,不需要释放。内存引用计数为零,因此不需要释放。

关于objective-c - 为什么我不必释放这些对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789761/

相关文章:

objective-c - 如何将Scrollview滚动到边界之外

ios - 将 UIView 单元格组件的背景颜色更改为绿色不会将组件呈现为绿色,

ios - 将 NSDictionary 传递给函数以添加对象/键,但在 main() 中显示为空

iphone - 你如何确定 Objective-C 中的最大 long 值?

iphone - UIPickerView中的分秒如何获取如图所示?

iphone - 如何卸载xcode并安装另一个版本?

swift - 在 init 中获取 UIView 的大小

iphone - 界面生成器 : Choose media based on target

objective-c - 在 Objective-C 中使用 Sqlite3 如何检索结果集中的行数

iphone - HTML5 iPhone Safari Mobile 在创建音频标签时可视化某些东西而不是 quicktime 符号