ARC(Automatic Reference Counting)
iOS 개발자들이 개발하면서 처음에 가장 많이 힘들어 하는 것은 리테인 카운트의 관리다. 수동으로 retain, release, autorelease를 코드에 넣어서 어플리케이션이 강제종료 되거나 메모리릭이 발생하는 현상을 관리하였다. 이제 Xcode 4.2에서부터는 ARC를 통해 컴파일러 수준에서 어플리케이션의 오브젝트의 life cycle을 관리해주는 과정을 단순화 시켜준다.
ARC는 컴파일시간에 retain, release, autorelease문을 코드에 자동으로 삽입시켜준다. 앞으로는 아래와 같이 코딩하면 된다.
그러면 ARC 전처리기는 자동으로 이렇게 바꿀 것이다.
ARC를 사용하기 위한 새로운 규칙은 아래와 같다.
① retain, release, autorelease, retainCount를 사용하면 안됨.
② dealloc 메서드를 강제로 호출하면 안됨.
③ 기존 properties는 assign, retain, copy 파라미터로 관리해왔으나, ARC에서는 더이상 사용하지 않으며, weak와 strong 파라미터가 추가됨.
- strong : 기존 retain을 대신하며, 소유자가 해제되지 전까지 해제되지 않음.)
- weak : 기존 assign을 대신하며, assign은 대상 객체가 해제되면 댕글링포인터가 되지만, weak의 경우에는 nil로 설정됨.
④ C구조의 Object 포인터를 사용하면 안됨. struct대신에 class로 저장하기를 권장함.
⑤ id와 void*를 암시적으로 형변환 할 수 없음.
⑥ NSAutoreleasePool 객체를 사용할 수 없으며, 대신에 @autoreleasepool 블록을 사용함.
그리고, Xcode 4.2에서는 ARC 방식으로 작성되지 않은 소스 파일을 다시 작성해야 하는 수고를 덜어주기 위해서, 특정 파일에만 ARC 적용을 해제하는 옵션도 제공해준다.