NSMutableArray 인스턴스에 접근시 EXC_BAD_ACCESS 발생.

Dev/iOS 2011. 9. 23. 17:53


Model 클래스에서 데이터 베이스의 내용을 읽어 NSMutableArray 로컬 변수에 채운후 클래스 멤버 변수로 대입 후 다른 뷰 콘트롤러에서 해당 배열에 접근을 시도 하였더니 EXC_BAD_ACCESS 에러가 발생 되었다.
원인은 데이터 베이스에서 읽어온 데이터를 저장 중이던 배열을 release해준것으로 보인다.

@interface Model : NSObject {
  NSMutableArray _array;
}
@property (retain) NSMutableArray * _array;
@end 

@implemention Model

...

- (void)readDatabase {
  ...
  NSMutableArray localArray = [[NSMutableArray alloc] initWithCapacity:sqlite3_data_count(statement)];

  // database에서 읽어온 데이터를 localArray에 채워 넣는다.

  _array = localArray;
  [localArray release]; 

}

위와 같이 release 코드를 삭제 해주면 해달 오류는 발생하지 않는데 아직 정확한 원인을 이해하지 못하겠다.
아직 Object-C 에서 메모리 관리가 정확히 어떻게 되는지 감이 안온다.
메모리 관리에 관련된 부분을 좀 더 자세히 공부해봐야겠다.

뭔진 모르지만 C언어의 그것과 굉장히 헷갈리고 매치가 되질 않는데 뭘가를 잘못 생각하고 있는듯 하다.

위와 같은 원인에 대하여 아시는 분 있으시면 좀 알려주세요 !!
 
: