2011. 6. 9. 12:27

인스턴스를 삭제하기

 C언어에서는 런타임에 동적으로 할당된 메모리는 반드시 해제 해야 문제가 발생 하지 않습니다.  표준 함수 malloc()에서 확보한 메모리는 free() 함수로 해제하지 않으면 메모리가 불필요하게 점유되어 메모리에 대한 참조가 없어진 후에도 응용 프로그램을 위한 메모리가 부족하게 되는데, 이것이 메모리 누수입니다.(Memory leak)

 Objective-C에서도 마찬가지며, Java 또는 Microsoft .NET 같이 메모리를 자동으로 해제해 주는 기능은 없습니다.  그래서 Object alloc 메서드로 확보한 인스턴스는 사용을 마친 시점에서 free 메시지를 보내서 반드시 해제해 주어야 합니다.

 free 메시지는 해당 인스턴스가 확보하고 있는 메모리 영역을 해제하고 인스턴스를 완전히 제거하기 위해 전송됩니다.  인스턴스가 삭제되는 시점에서 어떤 작업이 필요한 경우 free 메시지를 재정의 하여 사용하면 됩니다.  그러나 재정의시 상위 클래스의 free 메세지를 호출하는 것도 잊지 마세요.

 #import <stdio.h>

 #import <objc/Object.h>

 

 @interface Test : Object

 - (id) init;

 - (id) free;

 @end

 

 @implementation Test

-   (id) init

 {

  id obj = [super init];

  printf ( "init method \n");

  return obj;

 }

-   (id) free

 {

  printf ( "free method \ n");

  return [super free];

 }

 @end

 

 int main()

{

 id obj = [Test new];

 [obj free];

 

 return 0;

}

  프로그램의 main() 함수 부분에서 인스턴스를 new 메시지로 생성 초기화 하고 바로 free 메시지로 삭제합니다. init free 메서드를 재정의하여 메서드가 실행되는 것을 표시하기 위해 문자열을 출력합니다.

 일반적으로 초기화는 init 메서드에서 수행하고 해제는 free 메서드에서 이루어집니다.  init 메소드는 메소드의 시작 부분에서 부모 클래스의 init 메소드를 호출하고 free 메서드는 메서드 부분에서 부모 클래스의 free 호출 후에 사용합니다.

Posted by openserver