为什么我不必释放这些物体?

Tha*_*nks 2 iphone cocoa-touch memory-management objective-c uikit

这是一个示例代码,只释放"string"对象.

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

我理解为什么不释放错误对象.这是因为此处的方法没有使用"new"或"alloc"方法创建该错误对象.相反,这个是通过引用返回的,因此initWithContentsOfFile方法负责该内存.但是nameOfFile对象怎么样?他们为什么不释放它?它没有被引用返回......?

zpe*_*esk 6

类似于你不需要发布的原因error,你也不需要发布nameOfFile.在Objective-C中,如果声明一个字符串,因为NSString *temp = @"Hello"它被视为一个字符串常量,并且不需要释放它.内存引用计数为零,因此无需释放.