2011-04-28 3 views
1

도우미 클래스를 만들고 있습니다. 이 헬퍼 클래스는 상호 작용할 NSObject 클래스와 다른 것들을하는 UIViewController로 구성됩니다.대리인이 자동으로 nil로 설정되어있는 것 같습니다.

@protocol MyDelegate 
-(void) someCall; 
@end 
@interface MyHelperClass : NSObject { 
    id <MyDelegate> delegate; 


} 
@property (retain, nonatomic) id <MyDelegate> delegate; 

을 따라서이 잘 작동 : 이제

MyObjectClass *class = [[MyObjectClass alloc] init]; 
[class setDelegate:self]; 

,이 대표는이 같은 만든 뭔가입니다 : 여기

내 애플 대리자에서 발생 또는 내 NSObject의 클래스를 할당 할 때마다 무엇인가 . 그러나 여기에 문제가 있습니다. 내 헬퍼 클래스를 할당하고 뷰 컨트롤러 또는 다른 위임자로 설정 한 다음 내 헬퍼보기 컨트롤러를 여는 내 메서드 중 하나를 호출하면 대리자가 작동을 멈 춥니 다. 디버깅 후 그것은 다른보기 컨트롤러 팝업 때까지 일부 메모리 주소를 것 및 반환 할 때 대리자의 메모리 주소를 0x0 있습니다.

내 질문은 어떻게 될 수 있습니까? 대리인이 발표하지 못하게하려면 특별한 조치를 취해야합니까? (나는 어디에도 그것을 풀어주지 않는다) 그것을 유지해야 하는가? viewcontroller를 열어도 계속 사용하도록 할당하려면 어떻게해야합니까?

미리 감사드립니다.

+0

어떻게해야합니까? ... "도우미 클래스를 할당하고 뷰 컨트롤러 등의 위임자로 설정 한 다음 내 도우미 뷰 컨트롤러를 여는 내 메서드 중 하나를 호출하면 대리인이 작동을 멈 춥니 다." ... 코드를 게시하십시오 ..... 나는 이것이 참조 손실의 문제라고 생각합니다. 코드가 도움이 될 것입니다. – Ravin

+0

Ravin, 위에 NSObject 클래스를 할당하는 방법에 대한 코드를 보여주었습니다. 내 대리자에서 다음과 같은 메서드를 호출합니다. [delegate someCall]; – John

+0

MyObjectClass * class = [[MyObjectClass alloc] init]; [class setDelegate : self]; someCall 메서드를 스스로 작성하고 있습니까? MyObjectClass 클래스의 다른 이름으로 시도해 보셨습니까? – Ravin

답변

0

대리인의 메모리 주소가 0x0 인 것은 할당되지 않았 음을 나타내며 릴리스 된 것이 아닙니다. 그것이 발표되면 더 이상 유효한 주소가 아니지만 그것이 공개되기 전과 동일한 주소가됩니다.

관련 문제