我有一个理解问题。给出了这个方法:
- (NSArray*)test {
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://stackoverflow.com/"]];
NSString *result = [[NSString alloc] initWithBytes:[data bytes]
length:[data length]
encoding:NSMacOSRomanStringEncoding];
result = [result stringByAppendingString:@"something"];
NSArray *arr = [NSArray arrayWithObject:result];
//[result release];
return arr;
}
如果我取消注释release
应用程序会崩溃并说它无法访问已发布的对象。
通过 not release
ingresult
字符串 Instruments 会报告泄漏 (NSPlaceholderString)。
我可以autorelease
在同一行上alloc
解决问题(我目前在我的应用程序中这样做)。
如果我理解正确,stringByAppendingString:
应该创建一个自动释放的对象,以便可以释放“旧”结果。然后方法arrayWithObject:
应该copy
将对象放入一个数组中。所以我的想法是在将字符串复制到数组后释放它。
我的知识是否遗漏了什么或有什么问题?