본문 바로가기

Development/IOS & Mac

ARC란....

이번에 면접을 보게 되면서 ARC에 대해서 물어봤는데 단순히 Compiler가 retain / release를 대신 작성해주는 것으로 알고 있었다. 그렇지만 면접관은 조금 더 내용을 알았으면 하는 뉘앙스가 있어서 다시 한번 알아보기로 하였다.


공식 홈페이지에서 살펴보니 기본적인 설명은 컴파일 타임시 retain / release 자동으로 추가해준다고 한다.

그리고 retain, release, autorelease 사용할 필요가 없으며 Property는 기본설정은 Strong이라고 한다.

../Art/ARC_Illustration.jpg


그리고 ARC가 적용이 되면서 새로운 룰이 생겼다. 하나하나 번역하기는.. 본인의 영어실력도 좋지 않고 귀찮아서.. 그대로 올리면..


  • You cannot explicitly invoke dealloc, or implement or invoke retainreleaseretainCount, or autorelease.

    The prohibition extends to using @selector(retain)@selector(release), and so on.

    You may implement a dealloc method if you need to manage resources other than releasing instance variables. You do not have to (indeed you cannot) release instance variables, but you may need to invoke [systemClassInstance setDelegate:nil] on system classes and other code that isn’t compiled using ARC.

    Custom dealloc methods in ARC do not require a call to [super dealloc] (it actually results in a compiler error). The chaining to super is automated and enforced by the compiler.

    You can still use CFRetainCFRelease, and other related functions with Core Foundation-style objects (see Managing Toll-Free Bridging).

  • You cannot use NSAllocateObject or NSDeallocateObject.

    You create objects using alloc; the runtime takes care of deallocating objects.

  • You cannot use object pointers in C structures.

    Rather than using a struct, you can create an Objective-C class to manage the data instead.

  • There is no casual casting between id and void *.

    You must use special casts that tell the compiler about object lifetime. You need to do this to cast between Objective-C objects and Core Foundation types that you pass as function arguments. For more details, see Managing Toll-Free Bridging.

  • You cannot use NSAutoreleasePool objects.

    ARC provides @autoreleasepool blocks instead. These have an advantage of being more efficient than NSAutoreleasePool.

  • You cannot use memory zones.

    There is no need to use NSZone any more—they are ignored by the modern Objective-C runtime anyway.

대부분의 내용이 메모리에 관련된 것들은 대부분 사용하지 말라고 하고 주의사항들이다... 더 자세한 내용은 공식홈페이지에서 찾아보시길..


참고 사이트 : https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html