2011-01-27 10 views
0

できるだけシンプルにコードを保管しています。また、アプリが必要とする機能を果たすために本当に必要な機能だけが含まれています。オブジェクトを試して解放しようとするとアプリケーションがクラッシュする

しかし、私はまだ説明できないクラッシュを取得しています。エラーメッセージはありません。私が[parser release]という行を追加したときに現れました。

XMLParserオブジェクトであるパー​​サーは、リリース時にクラッシュします。ローカルに割り当てられ、解放された場合、またはメンバー変数にしてdeallocメソッドで解放した場合でも発生します。ここで

は、その中で使用され、ほとんどのクラスのコードです。

#import <Foundation/Foundation.h> 
#import <UIKit/UIKit.h> 

@class WebServiceAPI, RadioAppDelegate, XMLParser; 
@interface WebServiceAPI : NSObject 
{ 
    XMLParser *parser; 
    FootballRadioAppDelegate *appDelegate; 
} 
@end 


#import "WebServiceAPI.h" 
#import "XMLParser.h" 

@implementation WebServiceAPI 

-(void) getRadioStationList//:(id) aDelegate; 
{ 
    NSURL *url = [[NSURL alloc] initWithString:@"http://bdoyle.kingpinhosting.com/Radios.xml"]; 
    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
    [url release]; 
    parser = [[XMLParser alloc] initXMLParser]; 
    [xmlParser setDelegate:parser]; 
    [xmlParser parse]; 

    [xmlParser release]; 
    xmlParser = nil;  
} 
- (void) connectionDidFinishLoading:(NSURLConnection*)connection 
{ 
} 

- (void) connection:(NSURLConnection*) connection didFailWithError:(NSError*) error 
{ 
} 

-(void) dealloc 
{ 
    [parser release]; 
    parser = nil; 
    [super dealloc]; 
} 
@end 

私は「パーサ」の放出をコールせずにコードを残している場合、それは完璧に動作します。しかし明らかにそれはメモリリークです。

+0

あなたがここでやっていないCocoa/iOSの取得の感覚に慣れるまで、「get *」メソッドに名前を付けないでください。条約は単に 'radioStationList'となるでしょう。 – bbum

+0

ありがとうございました。 –

答えて

0

あなたは

のNSLog

( "パーサ割り当ては%d"、[パーサーretainCount] @)を使用して、オブジェクトのメモリを割り当てると、空にしようとしているかどうかを確認しようとすることができますデリゲート

[パーサsetDelegate:nilを]

が役立つことを願っています。

1

「getRadioStationList」メソッドでパーサーを解放し、それをnilに割り当てないでください。その後、クラスのdeallocで再び解放します。

リリース後に2回リリースしたり、nilに割り当てたりしないでください。

+0

はタイプミスでした。混乱についてはごめんなさい –

1

パーサーを2回リリースするようです。 deallocで1回、getRadioStationListで1回です。

+0

それはタイプミスです!申し訳ありません。 –

0

parserがインスタンス変数の場合、releaseのコメントアウトはradioStationListになります。それはあなたがdeallocまで生き残るためにパーサを望んでいると仮定すると漏れではありません。

のXMLParserは標準delegateパターンに従っている場合、それはreleaseはおそらく後でかけ放出またはクラッシュにつながることを、このように、parserを保持しません。

クラッシュする場合はバックトレースが必要です。またはクラッシュログ。投稿してください。また、ゾンビを有効にして実行してみて、さらに情報があるかどうかを確認してください。

+0

OK。これらの点に感謝します。今からタイプミスを無視してもいいですか? –

関連する問題