0

このコードをこのWebサイトからダウンロードしました。http://homepages.ius.edu/rwisman/C490/html/nsxmlparser.htm

私がそれを分析するとき。メモリリークがあります。自動リリース、送信者、nil、[parser setDelegate:[Top10Parser new]]など、すべてをグーグルで試しましたが、機能しません。

私は助けが必要です。

- (void) run: (id) param  {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    NSXMLParser *parser = [NSXMLParser alloc];
    [parser initWithContentsOfURL: url];

[パーサーsetDelegate:自己]; <-(「参照カウントされたオブジェクトはリリース後に使用されます」)

    [parser parse];
    [parser release];

    if ([delegate respondsToSelector:@selector(parseDidComplete:)])
        [delegate performSelector:@selector(parseDidComplete:) onThread: thread 
                       withObject: outstring waitUntilDone:NO];

    [pool release];
} 
4

1 に答える 1

2

次の2行を変更します。

NSXMLParser *parser = [NSXMLParser alloc];
[parser initWithContentsOfURL: url];

NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL: url];

一部の学派で+allocは、所有権のあるオブジェクトを返し、initメソッドは所有権を追加も削除もしません。initメソッドがレシーバーの参照を消費し、所有されているオブジェクトを返すことを考えると、より正確になります。これは、アナライザーがそれを処理する方法です。したがって、initメソッドを呼び出しても結果をに割り当てないself場合、所有権はself消費され、新しい所有権オブジェクトへのポインターはありません。の今後の使用はすべてself、所有しなくなったオブジェクトを使用することです。

于 2012-04-11T21:25:24.257 に答える