2011-01-11 8 views
0

iPhone向けのプログラミングでは新しいです。私は小さなアプリを書いた。アプリケーションの一部がシミュレータで正常に動作しています。私は以下を理解していません:Objective C/Leakによる参照カウントの理解

アナライザーはコードに同意しません。 "メソッドは+1保持カウント(所有参照)を持つObjective-Cオブジェクトを返す"と彼は言った。

誰でも助けてくれますか?

おかげ...

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
if ([elementName isEqualToString:@"item"]) { 
    [item setObject:currentTitle forKey:@"name"]; 
    [item setObject:currentAutor forKey:@"descr"]; 
    [item setObject:currentContact forKey:@"contact"]; 

    [rssArray addObject:[item copy]]; 

    NSLog(@"Nachricht: %@", currentTitle); 
    [item release]; 

} 
[rssArray release]; 
} 

答えて

11

[rssArray addObject:[item copy]];

rssArrayは、[アイテムのコピー]に保持送信し、[アイテムのコピー]新しいオブジェクトを作成し、オブジェクトので、この行は、メモリリークを生成する[アイテムのコピー] retainCount = 2になりますが、一度だけ解放されます。 [item copy] autoreleaseを使用するか、[item copy]を一時変数に割り当て、配列に追加した後に解放してください。

+1

ニコレイが正しいです。あなたのプログラムに完全に依存しますが、深いコピー([rssArray addObject:[item copy]];)を必要としない場合もありますが、浅いコピーで十分です([rssArray addObject:item];) – nacho4d

+0

ありがとうございました。できます! – user571365

関連する問題