理解度の問題があります。この方法は次のとおりです。
- (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
、アプリがクラッシュし、リリースされたオブジェクトにアクセスできないと言います。文字列をing し
ないと、 Instruments はリーク (NSPlaceholderString) を報告します。release
result
私はautorelease
それと同じ行でそれを行うことができます。それalloc
は問題を解決するでしょう(私は現在アプリでやっています)。
私が正しく理解していればstringByAppendingString:
、「古い」結果の割り当てを解除できるように、自動解放されたオブジェクトを作成する必要があります。次に、メソッドarrayWithObject:
はcopy
オブジェクトを配列に入れる必要があります。だから私の考えは、配列にコピーされた後に文字列を解放することでした。
私の知識に何かが欠けているか、何か間違っていますか?