相关疑难解决方法(0)

泄漏或崩溃 - 自动释放和释放之间的差异

我有一个理解问题.给出了这种方法:

- (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;
}
Run Code Online (Sandbox Code Playgroud)

如果我取消注释,releaseApp会崩溃并说它无法访问已发布的对象.
release通过result字符串仪器会报告泄漏(NSPlaceholderString).

我可以autorelease在同一条线上alloc,它可以解决问题(我正在我的应用程序中进行).

如果我理解正确stringByAppendingString:应该创建一个自动释放的对象,以便可以释放"旧"结果.然后该方法arrayWithObject:应该copy将对象放入数组中.所以我的想法是在将字符串复制到数组后释放它.

我错过了我的知识吗?

release objective-c autorelease nsstring nsdata

2
推荐指数
2
解决办法
1488
查看次数

标签 统计

autorelease ×1

nsdata ×1

nsstring ×1

objective-c ×1

release ×1