Xcode 4에서 NSZombieEnabled를 어떻게 설정합니까?


456

어떻게 설정합니까 NSZombieEnabledCFZombieLevel엑스 코드 4 년 내 실행 파일?


1
Xcode 4에 대해 질문하고 있습니까?
Jehiah

8
이와 같은 옵션이 기본적으로 활성화되어 있지 않은 이유는 무엇입니까?
Daniel Magnusson

26
기본적으로 실제 메모리 확보를 막기 때문에 기본적으로 활성화하는 것이 좋지 않습니다.
Chetan

14
@Daniel Magnusson : 그것은 생존에 가장 적합한 것입니다. XCode를 사용하여 개발을 비우호적이지만 실행 가능하게 만들면 더 나은 개발자가됩니다. 농담이야
Dan Rosenstark

3
@DanielMagnusson 나는 이것이 나쁜 생각이 아니라고 생각한다. AFAIK "좀비"모드는 모든 종류의 객체를 특별한 종류의 객체로 바꿔서 메시지를 보낼 때 감지 할 수 있도록한다. 따라서 "좀비 모드"를 활성화하면 개체가 할당 해제되지 않으므로 이러한 오류를 처리 할 때만 사용해야합니다.
Besi

답변:


753

Xcode 4.x에서

R

(또는 클릭 Menubar> Product> Scheme>Edit Scheme )

"진단"탭을 선택하고 "좀비 개체 사용"을 클릭하십시오.

"좀비 개체 사용"을 클릭하십시오

이렇게하면 릴리스 된 객체가 다시 사용될 때 콘솔 경고를 인쇄하는 NSZombie 인스턴스로 전환됩니다. 이것은 메모리 사용을 늘리고 (실제로 객체가 해제되지는 않음) 오류보고를 향상시키는 디버깅 보조 도구입니다.

일반적인 경우는 개체를 과도하게 해제하고 어떤 개체를 모르는 경우입니다.

  • 좀비로 : -[UITableView release]: message sent to deallocated instance
  • 좀비없이 : EXC_BAD_ACCESS

이 Xcode 설정은 App Store 제출을 위해 애플리케이션을 아카이브 할 때 무시됩니다. 응용 프로그램을 해제하기 전에 아무것도 만질 필요가 없습니다.

누르면 R지키는 동안 제품> [실행]을 선택하는 것과 동일 Alt키 것은 눌렀습니다.
"좀비 개체 사용"확인란을 클릭하는 것은 인수 탭의 "환경 변수"섹션에서 "NSZombieEnabled = YES"를 수동으로 추가하는 것과 같습니다.


27
감사합니다-이 옵션을 어디에 숨겼는지 궁금합니다. 이것이 '구성표 편집'메뉴와 동일한 창이라는 것을 알게되었습니다.
emp

1
여기에 추가하기 위해 "실행"옵션 사용 "상자가 선택된 경우"실행 "화면에서 수행하면"테스트 "로 설정됩니다. 테스트를 위해서만하고 싶다면 상자의 체크를 해제해야합니다.
Cameron

1
이 옵션은 Xcode 4.1 (오른쪽?)
phi

2
XCode 5 (및 이후 버전의 4-4.3.x, 아마도 이전 버전 일 경우)에서이 값은 CMD-<( CMD-SHIFT-comma) 또는Product -> Scheme -> Edit SCheme...
Olie

1
나는 당신이 저를 직접 할 수 있다면 좋을 텐데, 심지어 좀비가 생략되어, 이상한 EXC_BAD_ACCESS 문제에 갇혀 있어요 stackoverflow.com/questions/29210057/...
Anoop Vaidya

70

Jano의 대답은 그것을 찾는 가장 쉬운 방법입니다 .. 다른 방법은 구성표 드롭 다운 막대-> 구성표 편집-> 인수 탭을 클릭 한 다음 환경 변수 열에 NSZombieEnabled를 추가하고 값 열에 YES를 추가하는 것입니다 ...


57

이 대안이 더 편리하다는 것을 알았습니다.

  1. "실행 버튼 드롭 다운"을 클릭하십시오.
  2. 목록에서 Profile
  3. "Instruments"프로그램을 열면 선택할 수도 있습니다 Zombies
  4. 이제 앱과 상호 작용하고 오류를 일으킬 수 있습니다
  5. 오류가 발생하자마자 개체가 해제되어 할당이 해제 될 때 힌트를 얻을 수 있습니다.

좀비

좀비가 감지되면 문제의 개체가 할당 된 시점과 보관 또는 해제 된 위치를 보여주는 깔끔한 "좀비 스택"을 얻습니다.

Event Type    RefCt     Responsible Caller
Malloc            1     -[MyViewController loadData:]
Retain            2     -[MyDataManager initWithBaseURL:]
Release           1     -[MyDataManager initWithBaseURL:]
Release           0     -[MyViewController loadData:]
Zombie           -1     -[MyService prepareURLReuqest]

Xcode Schemes의 진단 탭을 사용할 때의 장점 :

  1. 진단 탭에서 옵션을 선택 취소하는 것을 잊어 버린 경우 메모리에서 객체가 해제되지 않습니다.

  2. 손상된 객체가 어떤 방법으로 할당 / 릴리스 또는 유지되는지를 보여주는 더 자세한 스택을 얻을 수 있습니다.


1
XCode 4에 "Zombies"옵션이 없습니다. 왜 그렇습니까?
Li Fumin

4
iOS Simulator > All메인 템플릿 목록에서 선택했는지 확인하십시오 (시뮬레이터에서만 가능)
Besi

어떤 이유로 .. '좀비'를 선택하면 할당이 표시됩니다.
abbood

이것이 가장 좋은 해결책입니다. 많은 도움이되었습니다 :)
Michał Miszczyszyn



1

Cocoa는 이러한 상황을 디버깅하는 기능을 크게 향상시키는 멋진 기능을 제공합니다. NSZombieEnabled라는 환경 변수 입니다. objective-C에서 NSZombieEnabled 설정을 설명하는 이 비디오 를보십시오.


-1

Xcode> 4.3에서 :

체계 드롭 다운 막대-> 체계 편집-> 인수 탭을 클릭 한 후 환경 변수 열에 NSZombieEnabled를 추가하고 값 열에 YES를 추가하십시오.

행운을 빕니다 !!!

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