현재 iPad 용 앱을 개발 중입니다. 개발은 iOS 4.2에서 시작되었으며 현재 iOS 4.3에서 계속 진행 중입니다. iOS 5의 ARC에 대해 읽었으며 기본적으로 더 이상 객체를 해제하고 유지할 필요가 없다는 것을 이해했습니다. 내 질문은 :
-
나는에서 iOS 5로 업그레이드하기로 결정하면, 나는 모든 제거해야 할
[myObject retain]
및[myObject release]
내 코드에서 문을? -
ARC를 사용하여 iOS 5 용 새 앱을 개발하는 경우 일종의 “레트로 호환성”검사를 구현해야합니까? 즉, iOS 버전을 확인하고 그에 따라 통화를 유지하고 해제해야합니까? 기본적으로 ARC는 모든 iOS 버전 또는 iOS 5에서만 사용할 수 있습니까?
답변
iOS 5로 업그레이드하기로 결정한 경우 코드에서 [myObject retain] 및 [myObject release] 문을 모두 제거해야합니까?
예. 그러나 XCode 4.2에는 새로운 “Objective-C ARC로 마이그레이션”도구 (편집-> 리 팩터 메뉴에 있음)가 포함되어 있습니다. dealloc 호출은 다른 이야기입니다. 주석에서 언급했듯이 clang 참조는 dealloc 메소드를 유지해야한다고 명시합니다.
이론적 근거 : ARC가 인스턴스 변수를 자동으로 파괴하더라도 유지 불가능한 자원 확보와 같은 해제 방법을 작성해야하는 합법적 인 이유가 있습니다. 이러한 방법으로 [super dealloc]을 호출하지 못하는 것은 거의 항상 버그입니다.
새로운 -fobjc-arc 컴파일러 플래그를 사용하여 ARC를 활성화합니다. ARC는 Mac OS X v10.6 및 v10.7 (64 비트 응용 프로그램) 및 iOS 4 및 iOS 5 용 Xcode 4.2에서 지원됩니다 (Mac OS X v10.6 및 iOS 4에서는 약한 참조가 지원되지 않음). Xcode 4.1에서는 ARC 지원이 없습니다.
–
ARC를 사용하여 iOS 5 용 새 앱을 개발하는 경우 일종의 “레트로 호환성”검사를 구현해야합니까? 즉, iOS 버전을 확인하고 그에 따라 통화를 유지 및 해제해야합니까? 기본적으로 ARC는 모든 iOS 버전 또는 iOS 5에서만 사용할 수 있습니까?
ARC는 런타임이 아닌 컴파일 타임에 마법을 수행하기 때문입니다.
ARC는 언제 유지, 해제 및 자동 릴리스를 사용해야하는지 기억할 필요없이 객체의 수명 요구 사항을 평가하고 컴파일 타임에 적절한 메소드 호출을 자동으로 삽입합니다. 컴파일러는 또한 적절한 할당 해제 방법을 생성합니다.
ARC에 대한 추가 정보 : http://clang.llvm.org/docs/AutomaticReferenceCounting.html
답변
Q1 : 아니요. 기존 코드가있는 경우 -fno-objc-arc 와 같이 그대로 사용하면 파일에서 ARC를 선택적으로 비활성화 할 수 있습니다.
여러 파일에서 ARC 를 비활성화 하려면 다음 을 수행 하십시오 .
- Xcode의 Target / Build Phases / Compile Sources에서 원하는 파일을 선택하십시오.
- ENTER를 누릅니다 . (두 번 클릭하면 하나의 파일 만 선택)
- -fno-objc-arc 유형
- Enter 또는 완료를 누르 십시오
Q2 : 아니요, 대상은 iOS 4.0만큼 낮을 수 있습니다
답변
내가 이해하고 iOS 5와 iOS 4.3을 실행하는 iPhone / iPod이 각각 작동하는 한, 그것은 모두 자동입니다. 4.0으로 시작하여 iOS 5.0 용 Xcode와 함께 작동하도록 “업데이트 된”앱은 모든 할당 해제 등을 포함하더라도 릴리스 및 유지에 대한 경고를하지 않습니다. 그러나 삽입 한 동일한 코드 중 일부 (파일 복사) iOS 5 용 Xcode로 생성 된 새 프로젝트 에 많은 경고가 있습니다. 따라서 모든 통화를 제거 할 필요는 없으며 이전 버전에 맞게 자동으로 조정됩니다. iPod을 프로파일 링 할 때 메모리 누수 나 다른 할당 해제 / 해제 흔적이 보이지 않습니다. 도움이 되나요?
답변
귀하의 질문 의이 부분에 대해
ARC를 사용하여 iOS 5 용 새 앱을 개발하는 경우 일종의 “레트로 호환성”검사를 구현해야합니까? 즉, iOS 버전을 확인하고 그에 따라 통화를 유지 및 해제해야합니까? 기본적으로 ARC는 모든 iOS 버전 또는 iOS 5에서만 사용할 수 있습니까?
iOS 5 컴파일러는 “retro-compatibility”(실제로 유지 / 릴리스 작업을위한 코드를 ADDS로 사용)를 사용하지만 iOS 5.0 용으로 컴파일하지 않으면 weak
키워드로 사용할 수 없습니다. . 대신을 사용 assign
합니다. 이것은 불행한 일 weak
입니다. 큰 장점입니다 (매달려 포인터가 없습니다!). 내 질문을 참조 여기 의 논의 weak
, assign
그리고 ARC.
답변
새로운 -fobjc-arc 컴파일러 플래그를 사용하지 않고 ARC를 비활성화 할 수 있다면 앞으로 코드를 다시 작성하지 않아도됩니다.