저번에 XML에 파싱 부분을 올렸었다 소스를 올렸지만 그렇게 되면 메모리 관리가 제대로 안돼서 다시 만들었다.
일단 지난 번 코드를 보자
-(NSMutableArray*) parseContent:(NSURL*) url
{
NSXMLParser* xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[xmlParser setDelegate:self];
_hugeBoardDataArray =[NSMutableArray arrayWithCapacity:1024];
_elementStack = [NSMutableArray arrayWithCapacity:1024];
[xmlParser parse];
return _hugeBoardDataArray;
}
@end
보면 엉망이다 일단 arrayWithCapacity를 마땅히 쓸필요가 없고 _hugeBoardDataArray와 ElementStack을
- (id) init
{
if((self = [super init]) != nil)
{
_hugeBoardDataArray = [[NSMutableArray alloc] init];
_elementStack = [[NSMutableArray alloc] init];
}
return self;
}
생성자에서 이렇게 처리 하였다.
그리고 이부분은
-(NSMutableArray*) parseContent:(NSURL*) url
{
NSXMLParser* xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[xmlParser setDelegate:self];
[xmlParser parse];
[xmlParser release];
return [NSMutableArray arrayWithArray:_hugeBoardDataArray];
}
이렇게 고쳤다.
return 부분이 포인트다 무언가를 리턴할때 꼭 autoRelase로 만들어서 리턴해야 한다는 것을 깨달았다.
arraywitharray를 쓴이유다 만약 그냥 _hugeBoardDataArray를 리턴하게 되면 release를 해줘야 하는 타입임으로
저렇게 넣어서 했다.
그리고 data쪽도 new로 받았었는데
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@”HugeBoardInfo”] == TRUE)
{
HugeBoardData *data = [[HugeBoardData alloc] init];
[_elementStack addObject:data];
[data release];
}
else if([elementName isEqualToString:@”idx”] || [elementName isEqualToString:@”Name”] || [elementName isEqualToString:@”Title”] || [elementName isEqualToString:@”Description” ] || [elementName isEqualToString:@”Date”])
{
NSString *element = [NSString stringWithString:elementName];
[_elementStack addObject:element];
}
}
저렇게 alloc로 받도록 수정하였다.
마지막으로
-(void) dealloc
{
[super dealloc];
[_hugeBoardDataArray release];
[_elementStack release];
}
이렇게 메모리 해제는 꼭 해줘야 한다.
'iPhone App' 카테고리의 다른 글
[iphone] IB 를 이용해서 Custom TableViewCell 만들기 (0) | 2011.07.27 |
---|---|
[iphone] Instruments를 이용해서 메모리 체크를 하자 (0) | 2011.07.27 |
[iphone] exc_bad_access 에러 났을때 Xcode4에서 활용법 (0) | 2011.07.26 |
[iphone] ModelViewController를 사용해서 뷰위에 뷰를 올려보자 (0) | 2011.07.26 |
[iphone] UIViewController안에 UITableView Insert하기 (0) | 2011.07.25 |