2013-07-24 1 views
0

난 정말 ...이 문제에 대한 적절한 해결책을 알고 싶습니다 방법 :호출 방법 (자체 문제) MyOtherClass에 내가 알고 예를 들어 MyMainClass의 메소드를 호출해야하는 경우

MyMainClass *class = [MyMainClass alloc] init]; 
[class runSomeMethod]; 

문제는 runSomeMethod에서 MyOtherClass에서 호출 된 다른 인스턴스이기 때문에 self를 참조하는 경우입니다. 이 문제를 이해하고 해결 방법을 알고 있지만 누군가가이 문제를 해결하고 필요한 경우 MyMainClass의 원래 인스턴스를 호출하는 올바른 방법을 알려주십시오. 감사!

+0

이미 인스턴스화 된 객체의 메소드를 호출해야하는 경우 인스턴스 변수 또는 속성에 저장하여 나중에 참조 할 수 있습니다. –

+0

MyMainClass에 MyOtherClass의 객체가 있습니까? –

+0

@AaronBrager 예, 기본적으로 제가 한 일입니다. – rick

답변

1

자신의 클래스 인스턴스를 만드는 대신 self 개체를 사용하여 해당 메서드를 호출 할 수 있습니다.

그런 다음 방법에서 self을 참조하면 동일한 인스턴스가 사용됩니다. 당신이 당신의 클래스는 항상 하나 개의 객체를 참조 할 경우

그래서, 당신은 또한

[self runSomeMethod]; 

같은 방법을 호출해야합니다, 당신은 즉, 싱글 톤 클래스로 클래스를 생성하는 것이 좋습니다, 무엇이든간에 - 수업은 항상 하나의 객체를 발행합니다. 다음 코드를 추가, 구현 파일에 MyMainClass.m을 다음

+ (MyMainClass *)singletonInstance; 

:

SINGLETON WAY

싱글 톤 클래스를 만들려면 MyMainClass.h로 이동이 속성을 추가

//Just below @implementation MyMainClass 
static MyMainClass* _singletonInstance = nil; 

+(MyMainClass*)singletonInstance 
{ 
@synchronized([MyMainClass class]) 
{ 
    if (!_singletonInstance) 
     _singletonInstance = [[self alloc] init]; 
    return _singletonInstance; 
} 

return nil; 
} 


+(id)alloc 
{ 
@synchronized([MyMainClass class]) 
{ 
    NSAssert(_singletonInstance == nil, @"Attempted to allocate a second instance of a singleton."); 
    _singletonInstance = [super alloc]; 
    return _singletonInstance; 
} 

return nil; 
} 

그게 전부입니다. 이제 MyMainClass의 개체를 호출 할 때마다 [[MyMainClass singletonInstance] runSomeMethod]을 사용하십시오. 또한 self을 사용하면 동일한 개체를 참조합니다.

+0

이 점을 이해하고 있지만 다른 수업에서 자신을 어떻게 부를 수 있습니까? 그리고 싱글 톤 클래스를 만드는 방법을 조사해야 할 수도 있습니다. 실제로 어떻게 해야할지 모르겠습니다. :-) – rick

+0

위의 답변을 업데이트하십시오. 올바른 것으로 표시하면 감사하겠습니다. –

+0

굉장한 감사합니다! :-) – rick