2010-03-23 4 views
0

이상한 EXC_BAD_ACCESS 오류가 발생합니다. 메소드를 종료 한 후에 객체가 필요 없다면 객체를 유지할 필요가 없다고 생각했지만 재확인하고 싶습니다. 다음에서 "tData"를 유지해야합니까?개체를 단일 메서드의 범위 내에서만 사용하려면 개체를 유지해야합니까?

-(void)myMethod:(UITouch*)touch{ 
    TouchData *tData = (TouchData *)CFDictionaryGetValue(datasByUITouch, touch); 
    [tData doSomething]; 
} 
+0

괜찮을 것입니다. '[tData doSomething]'메서드 호출이나 다른 곳에서 EXC_BAD_ACCESS 오류가 발생합니까? – kubi

+0

[tData doSomething]에 있습니다. 이상한 일이 벌어지고있어. – morgancodes

+0

무엇을해야합니까? – debu

답변

0

나는 규칙에 따라, 당신이하고있는 일은 그 범위의 tData 객체를 유지할 필요가 없다고 생각합니다. 당신은 당신이 액세스하는 TouchData의 방법에 대한 책임이 있다는 것을 의미하는 대신 일부 데이터를 반환 TouchData의 방법 중 하나를 사용하고, 초기화, ALLOC, 새로운 또는 사본을 수행하지 않는 개체를 놓습니다.

0

개체가 CoreFoundation 개체로 반환됩니까? 그렇다면 당신이 생성 또는 복사 기능-등이 가져 오기 기능 - 당신이 그것을 소유하지 않는 이외의 코어 재단 함수에서 객체를 수신하는 경우, 애플 문서 도구 (http://developer.apple.com/mac/library/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-SW1)

에서이 참조 은 오브젝트의 수명이 인 것을 확신 할 수 없습니다. 개체를 처리하는 동안 개체를 사용하지 않으려면 소유권을 (CFRetain 함수 사용)으로 지정해야합니다. 당신은 로 끝냈을 때 소유권을 포기한 후 입니다.

0

이 방법으로 유지할 필요가 없습니다. 이 메서드가 호출되기 전에 터치가 릴리스 된 것처럼 보입니다.

CFDictionary는 어떻게 작성 되었습니까? 값을 유지하기위한 지시 사항으로 작성되지 않은 경우 사전은 터치를 유지하지 않습니다. 이 경우 CFDictionaryCreate (또는 CFDictionaryCreateMutable)의 valueCallBacks 인수로 kCFTypeDictionaryValueCallBacks (CFValueCallBacks)를 전달하십시오.

+0

흥미 롭습니다. 감사! 이 문제를 해결할 수 있는지 알려줄 것입니다. – morgancodes

관련 문제