9

ARC가 iOS 4.0 이상에서만 지원되는 기술적 이유는 무엇입니까?ARC가 iOS 4.0 이상에서만 작동하는 이유는 무엇입니까?

개발자가 요구하는 대신 메모리 관리 관련 코드를 자동으로 삽입하는 컴파일러 기능입니다. 내가 읽은 내용은 사과 자체가 동일합니다. 적어도 Apple은 Transitioning to ARC Guide이 의미하는 바입니다.

이와 같이, 이전 버전의 iOS에는 없었던 기능이 포함되어서는 안되며 실제로 ARC는 나중에 소개되었지만 iOS 4.0에서도 작동합니다.

호기심 때문에이 질문을하고 있는데 실제로는 iOS 3.x에서 ARC를 작동시킬 필요가 없습니다.

답변

16

자동 참조 카운팅이 64 비트 Snow Leopard를 최소 배포 대상으로 만 지원하는 것과 같은 이유입니다. ARC 지원은 최신 런타임의 새 버전에있는 특정 기능 만 필요로합니다. 이 최신 런타임은 iOS 4.0에서 도입 되었기 때문에 오래된 iOS 버전에는 기술적으로 ARC가 요구하는 일부 기능을 처리 할 수있는 런타임이 없습니다. OS 버전에 맞추어 져 있다면 32 비트 Snow Leopard 응용 프로그램도 지원되지만 64 비트 런타임 만이 지원됩니다.

WWDC 2011에서 Apple의 프레젠테이션, 특히 "Objective-C Advancements In-Depth"를 보시면 유지/릴리스 프로세스의 속도를 높이기 위해 다양한 후드 내부 기능 향상이 이루어졌으며, 뿐만 아니라 더 빠른 것 같이 @autoreleasepool. LLVM ARC specification에는 런타임 지원에 대한 전체 섹션이 있습니다. 이러한 개선은 컴파일러 지원 이상의 것을 요구합니다.

우리는 이미 인스턴스 변수 자동 합성 (Apple's documentation에서 설명)과 같은 기능에 최신 런타임을 사용해야했기 때문에 이것은 놀랄만한 일이 아닙니다.

대상이 iOS 4.0 인 경우에도 약한 참조가 지원되지 않으므로 명확한 기술적 인 문제가 여기에 있습니다. 이것은 다른 사람들에 의해 주장 된 바와 같이 개발자를 새로운 버전으로 이끌 기위한 단순한 마케팅 전략이 아닙니다.

+1

ARC가 i386에없는 x86-64의 일부 기능을 필요로하지 않을 가능성이 있습니다. "기술", "마케팅", "자원", "관리", "실용적인"등은 모두 주관적인 용어입니다. 애플이 OP 질문에 대한 모든 대답을 칩으로 채우지 않는 한 최선의 추측이다. 실제로 애플의 역할에 따라 다른 사람들은 아마 다른 이유가있을 것입니다! 그것에 대해 "명확하게"- 다른 대답에는 "아마"와 "추측"을 사용합니다. – CRD

+4

@CRD - Mac OS X v10.5 이상에서 iPhone 응용 프로그램 및 64 비트 프로그램은 최신 버전의 런타임을 사용하는 위의 Apple 설명서를 읽어야합니다. 다른 프로그램 (Mac의 32 비트 프로그램 OS X 데스크탑)은 기존 버전의 런타임을 사용합니다. " 이것은 x86-64 대 i386과 달리 런타임 기능에 관한 것입니다. 앞서 언급했듯이 각 운영 체제와 함께 제공되는 런타임 버전에는 기술적 인 차이가 있으며 ARC를 지원하려면 새로운 런타임 버전이 필요합니다. 새로운 런타임을 이전 OS 버전으로 백 포트하는 것은 실현 가능하지 않습니다. –

+0

ARC가 10.5에서 실행되지 않는 것을 제외하고 ... 현대 런타임을 사용하는 ... 그리고 현대 런타임이 i386에서 실행되지 않는 이유 ... 등등. 우리는 Turing 완성도에 대해 다음 말을 끝낼 것입니다 :-) – CRD

2

동일한 질문의 종류가 될 것 아이폰 OS 3.X에서 제공되지 않을 수 있습니다 -retain-release을 보내는 대신에 사용 C 함수의 몇 가지가 있습니다 :

NSRegularExpression은 iOS 4.0 이상 및 Mac OS X 10.7 (Lion) +에서만 지원되는 이유는 무엇입니까?

하기 완전히 쉽게 NSRegularExpression을 사용할 수 있습니다 맥 OS X 10.6.7 (스노우 레오파드)에서 아이폰 OS 5.0 (명백하게 4.0)의 시뮬레이터를 작동,하지만 그것은 맥 OS X 10.6.7 자체에서 지원하지 않는 것.

그리고 귀하의 질문에 대해 : ARC는 iOS 5.0에서 도입되었습니다. 그 당시에는 더 이상 iOS 3.x 사용자가 많지 않았기 때문에 Apple은 ARC를 iOS 3.x와 호환되게 만들기에는 너무 게으른 것으로 생각합니다.

4

docs of Apple은 ARC의 경우 런타임에서 super에 대한 dealloc 체인을 처리한다고 설명합니다.

관련 문제