objective-c 메모리 관리 첫번째
objective-c에서 메모리 관리는 reference counter(참조 카운터)를 통해서 이루어지게 된다.
메모리가 할당이 되면 이 카운터가 하나 증가하게 되고, 해제가 되면 하나 감소하게 되어 메모리 관리를 해주는 것이다. 이렇게 설명을 하면 간단한 것이나 실제로는 그렇게 간단하지가 않다.
어떻게 선언을 해야 autorelease 되고 어떻게 선언을 해야 release 또는 dealloc 해주어야 하는지 헷갈릴 수 있기 때문이다.
일반적으로 objective-c 에서는 메모리 관리를 위한 garbage collection을 제공한다.
그래서 복잡한 프로그램, 또는 메모리 관리에 민감한 프로그램이 아닌 이상 메모리 관리에 크게 신경쓰지 않아도 된다는 것을 의미한다. 그러나 효율적인 메모리 관리를 위해서는 objective-c의 메모리 관리에 대해 몇가지 알아야 할 것이 있다.
먼저 메모리를 할당하는 것에 대해 알아보자.
메모리를 할당하는 방법에는 두가지가 있다고 할 수 있다. automatic 스타일과 manual 스타일이다.
automatic style : NSString* string1 = [NSString string];
manual style : NSString* string2 = [[NSString alloc] init]; [string2 release];
위의 automatic 스타일의 경우는 메모리를 할당하게 되어 나중에 쓰이지 않게되면 자동적으로 release 되게 되고, manual 스타일의 경우는 [string2 release];와 같이 명시적으로 메모리를 해제해 주어야 한다.
automatic style에서 메모리 해제는 현재 변수가 있는 함수가 사용이 끝나기 전까지는 해제가 되지 않고, 사용이 끝나게 되면 메모리가 해제되고, manual style에서는 release를 명시하는 즉시 메모리를 해제 할 수 있게 된다.