Retain과 ARC (Automatic Reference Counting)

아직 스터디 중이긴 하지만..

ARC를 적용하기로 마음 먹었다.

하지만 영 뒤가 찝찝한게....
내가 싼똥 내가 닦는게 당연하다 생각하고 있었는데
내가 싼똥을 남이 닦아주는 느낌?;;; 이랄까...

뭐 비대한다 생각하고 작업하고 있기는 하지만;

그리고 비대를 쓰는게 더 깔끔하다고들 하니 뭐..

(참 적절한 비유인거 같다ㅋㅋㅋㅋ)



기존의 수동적인 Reference Counting 기법은
객체를 메모리에 생성하고 사용할때 Retain카운트를 사용하여
메모리상에서 객체가 사라지는 시점을 조절할 수 있다는 컨셉이다.

객체마다 retainCount 라는것을 가지고 있고,
alloc할때 +1
retain할때 +1
release 할때 -1
autorelease 할때 -1 (autorelease Pool에 들어가서 autorelease pool이 비워질때 -1 된다.)
그리고 retainCount가 0이 될때 메모리에서 해제 된다.(즉시 해제되는것 또한 역시 아니다.)


OS X처럼 Garbage Collecting를 지원해준다면 편했을지도 모르지만,
수동적인 Reference Counting에 사용되는 소스코드 낭비를 생각하면..
ARC는 참 매력적이다.


UIView *view = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
를 
UIView *view = [[UIView alloc] initWithFrame:CGRectZero];

또한

- (void)setView:(UIView *)view
{
[view release];
_view = [view retain];
}
- (void)setView:(UIView *)view
{
_view = view;
}
로 줄여주니. 코드 부담은 상당히 줄어드는편이다.

하지만 기존의 코드를 ARC 로 변경하기란 참으로 빡세다... 
아직 Strong과 weak의 차이점을 명확하게 설명하지도 못하는데다가,
[super dealloc]의 호출이 에러로 나타나게 되는 점은 특히..

슈퍼의 dealloc를 호출하지 못한다는것은 참 ... 난감한데;


https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

그리하여, 공부겸 해서
Transitioning to ARC Release Notes를 참고해서 
하나씩 번역해보고자 한다. 
언젠가 끝나겠지.



Automatic Reference Count (ARC)

image: ../Art/ARC_Illustration.jpg
- 2012년 7월 6일의 고백.
번역 시작도 안했음...


덧글

댓글 입력 영역


이 이글루를 링크한 사람 (화이트)

4