iOS 5 모범 사례 (출시 / 유지?)


109

초보 iPhone 프로그래머로서 iOS 5 또는 이전 버전에서 사용할 앱을 작성하는 가장 좋은 방법은 무엇입니까? 특히 데이터 릴리스 / 보존을 계속 사용해야합니까? 아니면 무시해야합니까? 그게 그렇게 중요한 건가?


1
ARC를 사용하고 여기에 설명 된 모범 사례를 따르십시오. amattn.com/2011/12/07/arc_best_practices.html 그렇게 하면 ARC가 "작동"한다는 것을 알 수 있습니다. 이러한 관행을 따르지 않으면 누출이 발생하고이를 추적하는 데 많은 시간을 할애하게됩니다 ....
— n13

답변:


98

그것은 당신에게 달려 있습니다. ARC (Automatic Reference Counting)를 사용하여 앱을 작성할 수 있으며 Xcode는 수정이 필요없이 ARC 지원 앱을 iOS 4에서 실행할 수 있도록 "접착 코드"를 작성합니다. 그러나 특정 기능은 작동하지 않으며 사용하려는 대부분의 라이브러리는 (때때로) 수많은 오류를 발생시키고 개발자가 ARC와 호환되는 업데이트를 릴리스 할 때까지 사용할 수 없습니다.


편집 : 최근에 파일별로 ARC를 끌 수 있음을 발견했습니다. pixelfreak 의 대답을 참조하십시오 . 따라서 내 조언은 여전히 ​​유효하지만 이제 타사 라이브러리를 ARC와 함께 작동하도록 업데이트 할 필요가 없습니다.

특정 파일에 대한 ARC 옵트 아웃에 대해 Apple이 말하는 내용은 다음과 같습니다.

ARC를 사용하기 위해 프로젝트를 마이그레이션하면 -fobjc-arc 컴파일러 플래그가 모든 Objective-C 소스 파일의 기본값으로 설정됩니다. 해당 클래스에 대해 -fno-objc-arc 컴파일러 플래그를 사용하여 특정 클래스에 대해 ARC를 비활성화 할 수 있습니다. Xcode의 대상 빌드 단계 탭에서 소스 컴파일 그룹을 열어 소스 파일 목록을 표시합니다. 플래그를 설정할 파일을 두 번 클릭하고 팝업 패널에 -fno-objc-arc를 입력 한 다음 완료를 클릭합니다.

여기에 이미지 설명 입력

여기 에서 전체 전환 가이드를 참조 하세요 .


15
ARC는 분명히 "파일 당"기준으로 꺼져있을 수 있으며, 아마도 레거시 라이브러리의 사용을 허용 할 것입니다.하지만 저는 그것을 사용하지 않았기 때문에 아직 모릅니다. 나는 그것에 대해 꽤 흥분된다. iOS 개발자가 유지 / 해제 할 필요가없는 세상을 상상할 수 있습니까 ?? 여기서 우리는 무엇에 대해 이야기 할 것인가 ?? ;-)
— Dan Ray

45
마침내 내가 그 모든 메모리 관리 쓰레기에 대해 좋은 핸들을 얻었을 때 그들은 그것을 무의미하게 만듭니다. 작업 !!!
— Kongress 2011-06-10

@ 댄 : 농담이 아니에요 선택적으로 끌 수 있다는 거죠? 저에게 중요한 링크를주세요! : D
— sudo rm -rf

1
이제 컴파일러가 NDA에 해당되지 않는다고 생각하므로 코드에서 일부 파일 (일반적으로 타사 소스 폴더)을 선택적으로 제외하려면 다음을 각 파일에 컴파일러 옵션으로 추가하면됩니다. -fno-objc-arc
— blackjack75

2
@Yar : 네, 그렇습니다. 그렇게 간단했으면 좋겠지 만 안타깝게도 모든 도서관이 그렇게 간단하지는 않습니다. 가지고 JSONKit예를 들어. ARC 검사를 통해 실행 해보십시오. 무슨 말인지 알 수있을 겁니다. )
— sudo는 RF RM은

170

개별 파일에서 ARC를 끄는 방법에 대해 여전히 궁금한 사람을 위해 내가 한 작업은 다음과 같습니다.

  1. 프로젝트 설정으로 이동하십시오. Build Phases > Compile Sources
  2. ARC를 비활성화 할 파일을 선택하고 -fno-objc-arc 컴파일러 플래그를 추가 합니다. 파일을 선택한 다음 "Enter"키를 눌러 여러 파일에 대한 플래그를 한 번에 설정할 수 있습니다.

이것이 권장되는 방법인지 모르겠지만 저에게 효과적입니다.

PS : 나는 clang.llvm.org에서이 정보 수집 여기 이렇게하지 NDA에서 공개적으로 액세스 할 수 있습니다.


1
이 플래그를 라이브러리와 함께 사용하면 작동하지만 lib .h 파일을 ARC 클래스에 포함하자마자 Xcode는 플래그가없는 것처럼 불평합니다. 이 플래그와 함께 작동하도록 이전 라이브러리를 얻을 수 있었습니까?
— 케이시

ASIHttpRequest 및 SBJson이 작동하도록 할 수 있습니다 (Reachability.h에서 구조체 사용에 대해 1 개의 경고가 표시됨). 모든 구현 파일에 플래그를 넣었습니다.
— pixelfreak 2011-06-24

모든 구현 파일 또는 .h 's? 프로젝트의 컴파일 소스 섹션에는 헤더 파일 만 있고 구현 파일은 없습니다. 추가 할 수 있지만 다른 효과 는없는 것 같습니다 . 참고로 REST 파서를 작동 시키려고합니다. ( github.com/mirek/NSMutableDictionary-REST.framework )
— casey

1
아하! 나는 오류를 충분히 면밀히 살펴 보지 않았다. 플래그가없는 것과는 다른 오류입니다. 코드에서 자동 해제 풀을 제거하고 뭐야!
— casey

여기에서 제안한 것처럼 여러 파일을 선택하고 Enter 키를 누르면 빌드 단계의 '소스 컴파일'에서 모두 제거되었습니다. 개별적으로 선택해야했습니다. 내가 뭔가 잘못하고 있는지 확실하지 않습니다.
— Gopalakrishnan Subramanian

10

iOS 5는 아직 NDA에 따라 공개 버전을 출시 할 때까지 계속 될 것입니다. 개발자 계정이있는 경우 Apple 개발자 포럼으로 이동 하여 질문하십시오.

이전 버전의 경우 참조를 계산하고 그에 따라 유지 및 릴리스해야합니다. 메모리 관리 가이드를 확인하십시오 .

편집 : 다음 은 자동 참조 계산에 대한 공개 사양 과 공개 iOS 5 페이지 의 인용문입니다 .

Objective-C 용 ARC (Automatic Reference Counting)는 메모리 관리를 컴파일러의 역할로 만듭니다. 새로운 Apple LLVM 컴파일러로 ARC를 활성화하면 유지 또는 릴리스를 다시 입력 할 필요가 없으므로 개발 프로세스가 크게 단순화되고 충돌 및 메모리 누수가 줄어 듭니다. 컴파일러는 개체를 완전히 이해하고 더 이상 사용되지 않는 즉시 각 개체를 해제하므로 앱이 예측 가능하고 부드러운 성능으로 그 어느 때보 다 빠르게 실행됩니다.


iOS 5를 사용하여 개발 된 애플리케이션이 구형 iPhone에서 작동합니까?
— Geekgirl

도구를 사용하여 이전 OS 용으로 개발할 수는 있지만 ARC와 같은 새로운 기술은 사용할 수 없습니다. 이전 OS를 대상으로하려면 수동 메모리 관리를 수행해야합니다. ARC를 사용하려면 사용자를 iOS 5로 제한해야합니다.
— nevan king 2011-06-13

1
ARC에 대한 언급은 공개 된 Apple 페이지 developer.apple.com/technologies/ios5에 있으므로 적어도 일부는 NDA에 포함되지 않습니다.
— cobbal 2011-06-13

8
사실 그것은 사실이 아닙니다. ARC로 iOS 4 용으로 빌드 할 수 있습니다. Apple 엔지니어의 말 : " iOS 4 및 Mac OS 10.6의 경우 컴파일러는 앱에 약간의 런타임 호환성 글루 코드를 추가합니다. 이는 호환성 코드가 제공 할 수있는 것보다 더 많은 지원이 필요한 __weak 변수를 제외한 모든 항목에서 작동합니다. iOS의 ARC 4는 ARC 코드가 아닌 코드보다 간단하지만 iOS 5의 ARC만큼 간단하지는 않습니다. "그런데 WWDC 일정 앱은 ARC로 작성되었고 iOS 4에서도 잘 작동했습니다!
— sudo rm -rf

3
네; 그러나 4.3.x 타겟 만이 '호환성 접착제'를 얻었 기 때문에 ARC 토크에서 검증되었습니다.
— Alan Zeino 2011 년

4

세부 사항은 현재 NDA 아래에 있지만 Apple은 http://developer.apple.com/technologies/ios5/에 자세히 설명 된대로 iOS 5에서 ARC (Automatic Reference Counting)를 구현했습니다.

iOS 5 SDK를 사용하여 Xcode 4에서 새 앱을 개발하는 경우 유지 / 릴리스 계산을 무시해도됩니다.

sudo rm -rf는 좋은 지적을합니다. 타사 라이브러리가 크게 영향을받을 수 있습니다.


iOS 5를 사용하여 개발 된 애플리케이션이 구형 iPhone에서 작동합니까?
— Geekgirl

iOS 5를 실행하는 iPhone에서 작동하므로 iPhone 3GS 또는 iPhone 4에서만 작동합니다. iOS 4를 지원하지는 않지만 컴파일 할 때 LLVM에서 수행하므로 바이너리를 생성 할 수 있습니다. iOS 4 및 5. iOS 개발자 계정을 만들고 사용 가능한 옵션을 가지고 놀기를 적극 권장합니다.
— Dominic

sudo가 nevan의 답변에 대한 그의 의견에서 지적했듯이 실제로 ARC를 사용하여 iOS 4.0을 다시 대상으로 지정할 수 있으므로 해당 OS를 실행할 수있는 구형 장치가 이것과 호환됩니다.
— Brad Larson

3

아무도 SystemConfiguration.framework를 언급하지 않았 습니까? Frameworks 에 넣는 것을 잊지 마십시오 . 나는 그것을 깨닫기 위해 비참하게 몇 시간을 보냈다.


이유를 설명해야합니다.
— John Riselvato 2013

3

확실히 개발자 나 팀의 선택입니다. ARC (Automatic Reference Counter)는 자동으로 메모리를 관리하여 작업을 좀 더 쉽게 만들어줍니다. 적절한 경우 해제, 유지 및 할당 해제됩니다. 아직 테스트 응용 프로그램에서 메모리를 관리하는 경험을 쌓아야한다고 생각합니다. 고려해야 할 또 다른 사항은 응용 프로그램이 타사 라이브러리에 의존하는지 여부입니다. ARC로 변환하지 않으면 응용 프로그램이 컴파일되지 않습니다. 선택은 당면한 상황에 따라 분명히 달라집니다.


0

프로젝트 설정> 빌드 단계> 소스 컴파일에서 플래그를 -fno-objc-arc로 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.