2012-05-07 2 views
0

OS X 개발에 익숙하지 않습니다. 델리게이트 콜백을 얻는 데 문제가 있었는데 메모리 문제 일 수 있다고 생각합니다. 나는 NSViewController를 가지고있다. 그것의 init 메소드에서 나는 그렇게으로 정의 NSObject의를 설정하고있다 :OS X에서 델리게이트 사용하기

 MyObject *aManager = [[MyObject alloc] initManager]; 
    __theManager = aManager; 
    self.theManager.delegate = self; 
    [aManager release]; 

나는 비 원자로 설정을했습니다 대의원, 할당합니다. 중단 점을보고 내 콜보기 컨트롤러에서 콜백을 볼 수 있어야하지만 이것은 결코 발생하지 않습니다. 어떤 아이디어?

+0

위임 메시지를 보내야하는 MyObject의 코드에 중단 점을 설정하십시오. 해당 코드가 실행되면 위임 메시지에 도달하거나 해당 메시지가 표시되지 않는 이유를 확인할 때까지 줄 바꿈을합니다. 도착하면 객체의 'delegate' 속성을 검사하고 올바르게 설정되어 있으면 대리인 메시지가 무엇이되어야하는지 확인하고 어떤 일이 발생하는지 확인합니다. –

답변

2

__theManager = aManager;self.theManager = aManager;이어야하며, theManager은 보존 된 속성이라고 가정합니다. 문제는 alloc] init];이 보유 개수 +1을 aManager에게 준다는 것입니다. __theManager = aManager;은 iVar가 직접 설정되어 있기 때문에 그 수를 늘리지 않습니다. 해제하면 보유 수는 0이되어 할당이 해제됩니다.

+0

고마워, 나는 그 불운하게 아직도 운이없는 것을 시도했다. 다시 중단 점을 확인한 결과 [위임장]이라고 볼 수 있습니다. 전화 받고있다. –

+1

@MarioPen 따라서 대리인 **이 호출되는 경우 문제가 무엇입니까? – trojanfoe

+0

그건 문제가되지 않습니다. –