【发布时间】:2011-05-20 05:17:35
【问题描述】:
我正在阅读Practical Memory Management 指南。
我对这段代码有点困惑:
- (void)printHello {
NSString *string;
string = [NSString stringWithFormat:@"Hello"];
NSLog(@"%@", string);
}
在我看来,字符串的引用计数将为 0。这是真的吗?
在我们调用NSLog(string) 之前,是什么阻止了字符串被释放?
这是否等同于这个:
- (void)printHello {
NSString *string;
string = [[[NSString stringWithFormat:@"Hello"] retain] autorelease];
NSLog(@"%@", string);
}
编辑:同样,此代码在Practical Memory Management 指南中给出:
- (NSString *)fullName {
NSString *string = [NSString stringWithFormat:@"%@ %@", firstName, lastName];
return string;
}
返回值何时以及如何被释放?所有者是谁? fullName的调用者需要释放全名返回的字符串吗?
【问题讨论】:
-
你没有说明你是指 iPhone 还是 Mac,这是有区别的,因为 Mac 有垃圾收集。
标签: iphone objective-c memory