iOS5 SDK의 자동 참조 카운팅에 대한 몇 가지 질문
저는 현재 아이패드용 앱을 개발하고 있습니다.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에는 새로운 "Migrate to Objective-CARC" 도구(편집 ->리팩터 메뉴)가 포함되어 있습니다.할당 해제를 호출하는 것은 다른 이야기입니다.주석에 언급된 것처럼, clang 참조는 할당 해제 방법을 유지해야 한다고 명시합니다.
근거: ARC가 인스턴스 변수를 자동으로 삭제하더라도 유지할 수 없는 리소스를 확보하는 등 할당 해제 방법을 작성해야 하는 정당한 이유가 있습니다.이러한 방식으로 [superdealloc]를 호출하지 못하는 것은 거의 항상 버그입니다.
새로운 -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)에서 원하는 파일 선택
- ENTER를 누릅니다. (두 번 클릭하면 하나의 파일만 선택됩니다.)
- 유형 -fno-objc-arc
- 입력 또는 완료를 누릅니다.
Q2: 아니요, 대상이 iOS 4.0보다 낮을 수 있습니다.
제가 알기로는 iOS 5와 iOS 4.3을 각각 실행하는 제 아이폰/아이팟이 작동하는 한, 그것은 모두 매우 자동적입니다.iOS 5.0용 Xcode로 작동하도록 "업데이트"한 4.0용 앱은 모든 할당 해제 등에 걸쳐 있지만 릴리스 및 유지에 대한 경고를 보내지 않습니다.하지만 iOS 5용 Xcode로 만든 새 프로젝트에 삽입(파일 복사)한 동일한 코드 중 일부는 경고가 매우 많습니다.따라서 이러한 모든 호출을 제거할 필요가 없으며, 이전 버전에 맞게 자동으로 조정됩니다.iPod를 프로파일링하면 메모리 누수나 할당 해제/해제 실패의 다른 징후가 보이지 않습니다.이게 도움이 되나요?
질문의 이 부분에 대해서는
ARC를 사용하여 iOS 5용 새 앱을 개발하면 일종의 "역호환성" 검사를 구현해야 합니까?예: iOS 버전을 확인하고 그에 따라 콜 보유 및 릴리스를 해야 합니까?그렇다면 기본적으로 ARC는 모든 iOS 버전에서 사용할 수 있습니까? 아니면 iOS 5에서만 사용할 수 있습니까?
5는 "유지를 5를 사용할 수 .weak키워드로대신 사용합니다.assign이것은 유감스러운 일입니다.weak이것은 큰 이점입니다(단단한 포인터 없음, 절대!).다음에 대한 자세한 내용은 여기에서 제 질문을 참조하십시오.weak,assign ARC1987 ARC.
만약 당신이 새로운 -fobjc-arc 컴파일러 플래그를 사용하지 않음으로써 ARC를 비활성화할 수 있다면, 당신은 앞으로 나아가는 코드를 다시 쓰도록 강요받지 않을 것입니다. - 아마 (?)
언급URL : https://stackoverflow.com/questions/6368600/some-questions-about-automatic-reference-counting-in-ios5-sdk
'programing' 카테고리의 다른 글
| git: 지점이 X 커밋으로 앞서 있습니다. (0) | 2023.05.04 |
|---|---|
| LINQ를 사용하여 컬렉션의 모든 개체 업데이트 (0) | 2023.05.04 |
| Python 3에서 선행 0으로 문자열을 패딩하는 방법 (0) | 2023.05.04 |
| Mac OS X에서 Python 3용 pip를 설치하는 방법은 무엇입니까? (0) | 2023.05.04 |
| xaml wpf의 텍스트 상자에 포커스 설정 (0) | 2023.05.04 |