【发布时间】:2023-03-28 05:27:01
【问题描述】:
我有一个理解问题。这个方法给出:
- (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,应用程序会崩溃并说它无法访问已释放的对象。
通过不releaseing result 字符串 Instruments 会报告泄漏 (NSPlaceholderString)。
我可以在alloc 它的同一行上autorelease 它,这将解决问题(我目前正在我的应用程序中这样做)。
如果我理解正确stringByAppendingString: 应该创建一个自动释放的对象,以便可以释放“旧”结果。那么arrayWithObject: 方法应该将copy 对象放入一个数组中。所以我的想法是在将字符串复制到数组后释放它。
我的知识是否遗漏了什么或有什么问题?
【问题讨论】:
标签: objective-c nsstring release nsdata autorelease