这是一个示例代码,其中仅释放“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/