2010-12-12 3 views
0

이것은 정말로 이상한 것입니다. 코딩 스타일을 약간 변경해야하는지, 아니면 gdb가 나에게 말을 걸고 있는지 궁금합니다.gdb가 가비지 출력을 일으키는 메소드 내부의 변수 선언

내 방법 중 하나의 구조는 다음과 같습니다

{ 
    // code that checks if this method needs to do something 
    // ... 

    // further down, I instantiate e.g. foo as an NSArray 
    NSArray *foo = bar; 
    // ... 
} 

나는 위의 코드를 디버깅 할 경우, 나는 NSDictionary라는 크기가 일이. 나는이 방법으로 foo는 몇 가지 라인을 인스턴스화하고 있기 때문에 foo는이 생성 될 때까지, 나는 콘솔까지 이러한 오류가 계속 :

-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x541cb90 

크기와 foo는 모두 동일한 메모리 0x541cb90 가리키는한다는 것이다 일어나는 이유. 그러나 나는 아직 foo를 만들지 않았기 때문에 그것에 대해 아무 것도 할 수 없다. 나타나는 오류가 foo = bar 지점으로 들어갈 때까지 반복적으로 나타납니다. 그 이유는 오른쪽의 디버그 변수 창에 값을 표시하려고하기 때문입니다. 그것은이 같은 방법 "을 통해"변수를 선언하기 위해 단순히 나쁜 관행은

libXcodeDebuggerSupport.dylib is missing in iOS 4.2.1 development SDK

관련이있을 수 있습니까? 맨 위에있는 메소드 내에서 사용하려고하는 모든 변수를 선언하는 것은 낭비스러운 일이지만, 아마도 ...해야합니까?

답변

1

이 특별한 문제는 보지 못했지만 가능한 한 변수에 최대한 가까운 곳에 변수를 선언하는 것이 가장 좋습니다.

일종의 Apple의 태도 테스트에서 iOS 개발자 센터에 로그인하여 샘플 코드 프로젝트 avTouch, GLSprite 및 AccelerometerGraph를 무작위로 가져 왔습니다.

이 중 avTouch는 avTouchController.mm의 171, 183 및 188 줄에 변수 중간 값을 명확하게 선언합니다. 블록의 맨 위에 선언 된 커플도 있습니다 (GCD의 의미가 아닌 구식의 의미로).

GLSprite에는 EAGLView.m의 107 및 108 줄에 중간 메서드 선언이 포함되어 있습니다.

AccelerometerGraph에는 GraphView.m의 257, 332 및 516 행에 유사한 선언이 포함되어 있으며 블록 맨 위에 변수의 예제가 많이 있습니다.

프로젝트 중 인위적으로 메소드의 맨 위로 이동 된 것으로 보이는 변수가 없습니다.

그래서 저는 Apple이 당신과 나와 모두 동의한다고 생각합니다. 이것은 GDB의 Xcode 그래픽 프론트 엔드에 도움이되지 않습니다.

+0

그건 내가 원했던거야. 저것에 대한 두 번째 의견을 주셔서 감사합니다. :) 결론은 여기에 gdb 또는 Xcode 또는 둘 다 나와 밖으로 울부 짖는입니다. 나는 레이다가 나의 다음 중지다고 생각한다. – Kalle