자 저번에 메모리 기초를 봤는데 일단 ARC를 보기 전에 옵제씨 사용 틀딱 시절엔 힙 영역에 어케 할당하고 해제했는지를 먼저 보려고 한다. 그 이유는 ARC를 왜? 써야 되는지를 알려면 불편함을 느껴야 되기 때문! 그럼 MRC에 대해 알아보장~
Manual Retain Counter의 준말로 수동으로 RC를 계산하는 기법이다!
RC는 Retain Counter(MRC에서) 에 준말이며, 참조횟수이다!
Swift에는 값타입과 참조타입이 있으면 참조타입이 이해가 안된다면, 저번에 작성한 블로그를 참고하면 될 거 같다잉~
MRC에 경우 개발자가 직접 count를 해서인지 인스턴스에 대한 RC에 접근할 수 있다! .retainCount는 인스턴스의 RC에 접근할 수 있는 프로퍼티이다!
Objective-C에서 인스턴스를 새로 생성하는 방법에 아래와 같은 메서드들이 있다.
- alloc
- new
- copy
- mutableCopy
//아래와 같은 방식으로 인스턴스를 새로 생성할 수 있다. TestClass *test = [[TestClass alloc] init];
여기서 인스턴스를 새로 생성하면 자동으로 RC가 +1이 된다. 어 그럼 자동으로 되는거자나? 왜 구라깜? 이제 수동적으로 증가시키는 걸 보여줄게용
retain 메서드를 사용해서 우린 RC를 수동적으로 증가시킬 수 있다
Q. 그럼 언제 쓰냐?
A. 절대로 남발해서는 안된다. 사실 RC값이 늘어나는 경우는 정해져있다. 새로 인스턴스를 생성했을때랑 기존 인스턴스를 참조했을 때. 그러나 새로 인스턴스를 생성할 땐 자동으로 생성해주니까
=> 기존의 인스턴스를 참조할 때 retain 메소드를 사용해 RC값을 사용한다TestClass *test = [[TestClass alloc] init]; TestClass *test2 = test; // 기존 인스턴스 참조 [test retain]; // test RC +1
release 메서드를 사용해서 우린 RC를 수동적으로 감소시킬 수 있다
[test release]; test2 = nil;
그냥 할당할때마다 옵제씨 시절에는 할당,해제를 주구장창~~~ 수동으로 해줘야했다. 벌써 불편하자나 그래서 우린 드디어 ARC를 배우러 간다.
MRC결론 : 후 너네는 이런거 하지마라~