2009-09-30 2 views
0

이 게시물에 관해서는 Why does 'self' protect memory space?, 나는 '자기'를 사용하여 aArray에 액세스하고 있습니다. 그러나 didSelectRowAtIndexPath : 메서드에서 여전히 유효하지 않은 객체를 얻습니다. 루트 컨트롤러에서 심지어 자기와 함께, 객체는 여전히 자동으로 리디렉션

,이 같은 aArray 액세스 : aArray은 참조를 잃어버린 함께 할 수있는 뭔가가

MyAppDelegate *theDelegate = [[UIApplication sharedApplication] delegate]; 
NSString *aKey = [theDelegate.aArray objectAtIndex:0]; 

겠습니까를? 왜 cellForRowAtIndexPath에서 발생하지 않을 것인가? (적절한 MyAppDelegate 외부의 첫 번째 사용)?

답변

1

aArray이 retain으로 설정된 속성 인 경우 어딘가에 과도하게 출시 될 수 있습니다. 그것은 귀하의 질문에 완전히 명확하게 보이지 않지만 인덱스 0에있는 객체가 유효하지 않으면 오버 릴리즈 된 것일 수 있습니다. Snow Leopard에서 Xcode 3.2를 사용한다면 Clang 정적 분석기를 사용하고 있는지 확인하십시오. 그러한 과도한 릴리스를 찾는 데 도움이 될 수 있습니다.

+0

예 - Clang을 사용하고 있습니다. 인덱스 0의 오브젝트가 유효합니다. – 4thSpace

+0

'보관'대신 '할당'을 사용하고 있습니다. 한동안 잡지 않았어. 문제 해결됨. – 4thSpace

+0

그래서 나는 과다 방출 대신에, 그것이 under-retained라고 생각합니다. –

2

이 질문은 이해가되지 않습니다. 또는 대답은 여전히 ​​"다른 질문에 대한 답변과 연결된 설명서를 읽고 이해하십시오"입니다. 특히

:

메모리 관리에 대한 마법이 없습니다. 다른 종류의 객체 참조와 비교하여 자기에 관해 특별한 것은 없습니다. 점 표기법은 메서드 호출의 짧은 손일뿐입니다. 그것도 특별하지 않습니다.

이러한 것을 이해할 때까지 귀신을 추적하고 코드의 실제 문제를 실제로 해결하지는 않습니다.

관련 문제