iOS/문법

Swift 문법과 친해지기 - MRC/MMR(Objective-C 잔재)

HJ39 2023. 1. 7. 01:18

제목에서 보다시피 MRC/MMR은 과거 Objective-C에서 사용하던 메모리 관리 기법이다.

 

ARC의 RC는 Reference Counting이지만 MRC의 RC는 Retain Counting이라고 한다.

 

소들이 님의 블로그를 보고 이해한 결과

 

TestClass *test = [[TestClass alloc] init];

라고 선언을 하면 alloc을 통해 힙 영역에 자동적으로 할당이 되고 Retain Count는 1 증가한다.

그 후 

TestClass *test2 = test;

test2에 test 주소값을 복사하는 경우 Retain Count이 증가하지 않는다.!!!!

이런 것 때문에 수동 메모리 관리 기법이라고 한다..

 

Retain Count를 올려주기 위해

TestClass *test2 = test;
[test retain];

retain을 직접 해주어야 Retain Count는 증가한다.

 

메모리를 반납하여 Retain Count를 감소시키기 위해서는 release라는 메서드를 사용한다.

 

test2 = nil;

nil 값으로 설정한다고 해서 Retain Count는 절대 감소하지 않는다. 

[test2 release];

release를 하면 Retain Count는 감소하게 된다. 이때 먼저 nil을 설정하는 경우 release를 할 수 없으므로 release를 먼저 한 이후에 nil값으로 끊어야 한다.

 

정말 불편한 메모리 기법이다...