2011-01-27 6 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

코코아/iOS에 익숙하지 않은 경우 'get *'메소드의 이름을 지정하지 마십시오. 여기서는하지 않습니다. 컨벤션은 단순히'radioStationList' 일 것이다. – bbum

+0

감사의 말을 맞았습니다. –

답변

0
확인할 여부

NSLog

시도 ("파서 할당 %의 D", [파서 retainCount] @) 비어를 사용하여 개체에서 메모리를 할당하도록 시도 할 수

델리게이트

[파서 setDelegate : 닐]

도움이되기를 바랍니다.

1

"getRadioStationList"메서드에서 파서를 해제하고 nil에 할당하지 않습니다. 그런 다음 클래스의 dealloc에서 다시 해제합니다.

해제 후 두 번 해제하거나 nil에 할당하지 않아야합니다.

+0

은 오타였습니다. 혼란에 대한 죄송합니다 –

1

파서를 두 번 내 보낸 것처럼 보입니다. dealloc에서는 한 번, getRadioStationList에서는 한 번.

+0

그게 오타! 미안합니다. –

0

parser이 인스턴스 변수 인 경우 release의 코드는 radioStationList입니다. dealloc까지 구문 분석기가 생존한다고 가정하면 누설이 아닙니다.

XMLParser가 표준 delegate 패턴을 따르는 경우 parser을 보유하지 않으므로 release은 나중에 과다 릴리스 또는 충돌로 이어질 수 있습니다.

충돌하는 경우 백 트레이스가 있어야합니다. 또는 충돌 로그. 게시 해주세요. 또한, 좀비가 활성화 된 상태로 실행 해보고 더 많은 정보를 얻을 수 있는지 확인하십시오.

+0

확인. 그 점에 감사드립니다. 지금부터 오타를 무시해도 될까요? –

관련 문제