이번에 면접을 보게 되면서 ARC에 대해서 물어봤는데 단순히 Compiler가 retain / release를 대신 작성해주는 것으로 알고 있었다. 그렇지만 면접관은 조금 더 내용을 알았으면 하는 뉘앙스가 있어서 다시 한번 알아보기로 하였다.
공식 홈페이지에서 살펴보니 기본적인 설명은 컴파일 타임시 retain / release 자동으로 추가해준다고 한다.
그리고 retain, release, autorelease 사용할 필요가 없으며 Property는 기본설정은 Strong이라고 한다.
그리고 ARC가 적용이 되면서 새로운 룰이 생겼다. 하나하나 번역하기는.. 본인의 영어실력도 좋지 않고 귀찮아서.. 그대로 올리면..
You cannot explicitly invoke
dealloc
, or implement or invokeretain
,release
,retainCount
, orautorelease
.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
CFRetain
,CFRelease
, and other related functions with Core Foundation-style objects (see Managing Toll-Free Bridging).You cannot use
NSAllocateObject
orNSDeallocateObject
.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
andvoid *
.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 thanNSAutoreleasePool
.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