2014-02-18 2 views
1

ios 이메일 앱이 있고 모든 특정 사용자 계정 정보를 제외하고는 정상적으로 작동합니다. overreleased 오브젝트와 유사한 충돌이 발생합니다.NSZombies가 작동하지 않을 때 작동하지 않을 때 작동 함

NSZombies를 사용하도록 설정하거나 Instruments를 사용하면 충돌이 발생하지 않습니다. NSZombies가 비활성화 될 때마다 발생하지만, 출시 된 것을보고 싶을 때 앱이 예상대로 수행됩니다.

내 질문은 좀비를 사용하면 발생하지 않도록하려면 어떻게 추적합니까? 좀비가 충돌을 막기 위해 정확히 무엇을하고 있는지, 그것을 모니터하기 위해 객체 위에 매달려 있습니까?

+0

"모든 예외"중단 점을 추가 했습니까? 이것은 추락을 추적하는 데 도움이 될 수 있습니다. – rckoenes

답변

1

내 질문은 좀비를 사용하면 발생하지 않도록하려면 어떻게 추적합니까?

가능한 한 적은 -autorelease을 사용하십시오.

Malloc Stack Logging으로 할당량이나 callsite를 좁힐 수 있습니다.

로컬 autorelease 풀을 생성하면 범위를 식별하는 데 도움이 될 수 있습니다.

때로는 메모리 낙서 또는 Guard Malloc이 도움이 될 수 있습니다.

Sim/Device에서 실행 중이면 차이가 발생하거나 다른 장치 모델을 유발할 수 있습니다.

다른 모든 메모리 문제 (예 : 누출, 순환 참조)를 제거하면이 문제를보다 쉽게 ​​파악할 수 있습니다.

태그가 지정된 포인터 인 경우 주소를 확인하는 것도 좋습니다.

더 많은 장소에 메시징을 도입해도 범위를 좁힐 수 있습니다. [obj self]obj이 좀비 인 경우 오류가됩니다.

또한 좀비가 충돌을 막기 위해 수행하는 작업은 개체를 모니터링하는 것입니까?

예. 객체의 -dealloc은 평상시처럼 호출되지만 일반적으로 할당에 사용 된 메모리는 반환되지 않으며 인스턴스는 좀비가됩니다. 예를 들어 메시지가있는 경우 런타임 오류가 발생하는 인스턴스입니다.