오브젝트의 해방


인스턴스를 삭제

C에서 런타임에 동적으로 할당 된 메모리 영역은 반드시 해제해야 없습니다. 표준 함수 malloc ()에서 확보 한 메모리 영역은 free () 함수에서 해제해야 메모리 공간이 필요없고, 메모리에 대한 참조가 손실 된 후에도 응용 프로그램을 위해 대기하고 계속 결과 로 메모리 누수가됩니다.

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 메소드는 메소드의 선두에서 상위 클래스의 init 메소드를 호출 free 메소드는 메소드의 끝에서 부모 클래스의 free를 호출합니다.