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.