2012-11-09 3 views
0

메모리 버그로 완전히 손실되었습니다. 이 문제는 simulator이 아닌 devicehappens에만 해당됩니다. 앱이 처음으로 기기에로드 될 때도 발생합니다. 앱을 닫고 다시 실행하면 문제가 사전 설정되지 않습니다. 이것은 내가 받고있는 오류입니다장치에서 할당 취소 된 인스턴스에만 전송 된 메시지

-[CFString retain]: message sent to deallocated instance 0xfd5a2f0 

릴리스 된 문자열이 무엇인지 알아 내려고 시도했습니다. 시뮬레이터가 아닌 장치에서 실행될 때 출시 된 객체가 무엇인지 알아내는 데 도움을주십시오! 미리 감사드립니다!

업데이트 : 아직 해결책이 없지만 프레임을 설정하고 위의 오류가 표시되는 코드 줄에서 앱이 지속적으로 중단된다는 것을 확인했습니다. 이 코드를 주석으로 처리하면 앱이이 지점을 통과하지만 다른 이상한 곳에서는 충돌 할 수 있습니다. 나는 충돌이 어디서 발생했는지 판단하기조차 할 수 없다.

CGRect frame = CGRectMake(27, 96, 265.0, 50.0); 
someAcct.frame = frame; 

저는 이것이 문자열이 아니기 때문에 매우 혼란 스럽습니다. 어떤 아이디어?

업데이트 2 :이 문제는 동기화되는 NSUser 기본값과 직접 관련이 있습니다. 이것은 꽤 무작위로 보이지만 이것이 문제의 원인입니다. 어떤 도움?

업데이트 3 : 문제는 일주일 전으로 해결되었습니다. 사실 이것은 문자열에 액세스 할 수 없기 때문입니다. 문자열이 메서드에 전달되면 해당 메서드는 작동하고 다른 메서드로 데이터를 전달합니다. 마지막으로 데이터가 사용자 기본값과 문서 폴더에 포함 된 로컬 plist에 기록 될 때까지는. 갑자기 앱이 문자열과 관련이 없더라도 일관되게 위와 같은 매우 이상한 장소에서 앱이 충돌합니다. 당황 스러웠다. 매우 오랜 시간 동안 연주 한 후, .h 파일로 가서 각 파일이 .m 파일에서 합성되고 self.stringName이 적용되었는지 확인하여 한 번에 하나씩 처리하기로 결정했다. .m 파일 전체에 걸쳐. 이것에 1 시간을 보낸 후에 나는 마침내 책임이있는 문자열을 발견했으며 문제는 해결되었습니다. self.stringName을 사용하면 메모리를 찾을 수 있으며 이러한 모호하고 매우 혼란스러운 응용 프로그램 충돌을 피할 수 있습니다. 모든 제안과 팁에 감사드립니다!

+0

계기에서 테스트하여 메모리 누출을 확인하십시오. – SachinVsSachin

+0

영향을받는 코드 부분에서 NSZombie를 활성화하고 실행할 수 있습니다. 코드 부분을 찾고 게시하십시오. 그래서 우리가 당신을 더 잘 도울 수 있습니다. :) –

+0

NSString이 예기치 않게 출시됩니다 ... 속성을 설정하고 문자열을 합성하고 자기와 함께 사용해야합니다. –

답변

0

문제의 범위는 retaincount입니다. mememory management을 참조하고 누락 된 것이 없는지 확인하십시오.

onNSZombieEnabled을 잊지 마세요.

+0

좀비를 사용할 수있게 설정했는데이 문제는 너무 모호하여 문제가 어디에서 왔는지 파악할 수도 없습니다. 50 페이지의 코드를 게시 할 수 있습니다. 인스턴스 번호가 무엇인지 결정할 수 있도록 무언가를 설정할 수있는 방법이 있습니까? – mejim707

+0

좀비를 사용하면 충돌 한 위치를 찾을 수 있습니다. 50 페이지의 코드에서 탈락 할 수 있도록 시도해보십시오. :) –

+0

나는 아직도 이것으로 고투하고 있고 그래서 많은 시간을 낭비하고있다! Xcode에서 좀비를 사용할 수있게되었지만 이중 릴리스 개체가 표시되지 않습니다. 앱이 다운 된 경우에만 표시됩니다. 0x37314870 : bkpt # 207 0x37314872 : blx 0x37342d68; 심볼 스텁 : getpid 0x37314876 : movs r1, # 9 0x37314878 : blx 0x37342e48; 심볼 스텁 : kill 0x3731487c : movs r0, # 0 0x3731487e : b 0x37314aae; ___forwarding___ + 710 *** - [CFString retain] : 해제 된 인스턴스에 메시지 전송 0xa82a30 문제의 코드를 가리 키지 않습니다. – mejim707

0

이유 중 하나는 장치와 시뮬레이터 장치와 같은 OS의 같은 버전의 시뮬레이터 작업 같은 iOS .Try를 사용하는 경우 iOS compatibility.Check에 기인하고 그에 따라 문자열의 release을 변경할 수 있습니다.

1

당신이 그것을 추적하는 것을 돕기 위해, didFinishLaunching() 메소드의 시작 부분, 중간과 어딘가에 didFinishLaunching()의 시작 부분에 NSLog를 놓을 수 있습니까?

그러면 앱이 보여주는 첫 번째보기 컨트롤러의 viewDidLoad()에서 NSLog를 푸시 할 수도 있습니다. 예를 들어, 탭 표시 줄 인터페이스를 사용하는 경우 첫 번째 탭의 루트보기 컨트롤러에 NSLog를 입력하십시오.

NSLog (@ "step 1"), NSLog (@ "step 2"), NSLog (@ "step 3") ...를 사용하여 코드가 어디에 도달했는지 알 수 있도록 출력을 구성 할 수 있습니다 NSLog (@ "나는 여기있다")보다는 충돌하기 전까지.

관련 문제