[에러 대처] message sent to deallocated instance - BAD_ACCESS


<에러화면>

*** -[CFString respondsToSelector:]: message sent to deallocated instance 0x936dc10




이와 같은 에러 메세지를 본 적이 있는 분은 Zombie디버거 환경변수를 지정한 분일 것이다. (원인을 알수 없고, BAD_ACCESS 에러 메세지만 뜨면서 Fault되는 경우에 이 환경 변수는 상당한 도움이 된다)이와 같은 메세지의 원인은 메세지를 통해서 감을 잡을 수 있겠지만 메모리 관리와 관련된 것이다.

예를들면 release를 한 변수를 사용하려고 시도할때의 경우이다.

나와 같은 경우는 NSMutableString을 사용하면서 발생하였는데

간단히 NSMutableString 과 NSString의 가장 큰 차이점을 해당 변수를 선언후에 값 변경이 가능한가 혹은 가능하지 않은가이다. Objective-C에서 Mutable이 붙은 변수 클래스는 선언후에도 값을 변경하고자 할때 사용하는 클래스인 것이다.



NSMutableString이 가리키고 있는 값을 변경하기 위해서는

MS_변수1 = 변수2;



와 같은 식으로 변경을 시도하려는 경우 가장 큰 문제를 일으키는 것이다.

NSMutableString 은 값을 변경하기 위한 메소드를 가지고 있다.

setString:@"NSString"



반드시 이 메소드를 이용해야만 옳은 결과를 기대할 수 있다.