[야우쓰] 2주차(2) MRC

hello_hidi·2022년 11월 22일
0

야우쓰

목록 보기
9/20
post-thumbnail

자 저번에 메모리 기초를 봤는데 일단 ARC를 보기 전에 옵제씨 사용 틀딱 시절엔 힙 영역에 어케 할당하고 해제했는지를 먼저 보려고 한다. 그 이유는 ARC를 왜? 써야 되는지를 알려면 불편함을 느껴야 되기 때문! 그럼 MRC에 대해 알아보장~

MRC

Manual Retain Counter의 준말로 수동으로 RC를 계산하는 기법이다!

i) RC란?

RC는 Retain Counter(MRC에서) 에 준말이며, 참조횟수이다!

Swift에는 값타입과 참조타입이 있으면 참조타입이 이해가 안된다면, 저번에 작성한 블로그를 참고하면 될 거 같다잉~

ii) retianCount

MRC에 경우 개발자가 직접 count를 해서인지 인스턴스에 대한 RC에 접근할 수 있다! .retainCount는 인스턴스의 RC에 접근할 수 있는 프로퍼티이다!

MRR로 RC 다루기

1) 인스턴스를 새로 생성할 때

Objective-C에서 인스턴스를 새로 생성하는 방법에 아래와 같은 메서드들이 있다.

  • alloc
  • new
  • copy
  • mutableCopy
//아래와 같은 방식으로 인스턴스를 새로 생성할 수 있다.
TestClass *test = [[TestClass alloc] init];

여기서 인스턴스를 새로 생성하면 자동으로 RC가 +1이 된다. 어 그럼 자동으로 되는거자나? 왜 구라깜? 이제 수동적으로 증가시키는 걸 보여줄게용

2) retain 메소드를 사용할 때

retain 메서드를 사용해서 우린 RC를 수동적으로 증가시킬 수 있다

Q. 그럼 언제 쓰냐?
A. 절대로 남발해서는 안된다. 사실 RC값이 늘어나는 경우는 정해져있다. 새로 인스턴스를 생성했을때랑 기존 인스턴스를 참조했을 때. 그러나 새로 인스턴스를 생성할 땐 자동으로 생성해주니까
=> 기존의 인스턴스를 참조할 때 retain 메소드를 사용해 RC값을 사용한다

TestClass *test = [[TestClass alloc] init];
TestClass *test2 = test; // 기존 인스턴스 참조
[test retain]; // test RC +1

3) release 메소드를 사용할 때

release 메서드를 사용해서 우린 RC를 수동적으로 감소시킬 수 있다

[test release];
test2 = nil;

결론

그냥 할당할때마다 옵제씨 시절에는 할당,해제를 주구장창~~~ 수동으로 해줘야했다. 벌써 불편하자나 그래서 우린 드디어 ARC를 배우러 간다.

MRC결론 : 후 너네는 이런거 하지마라~

profile
안뇽희디

0개의 댓글