2013-07-24 32 views
0

我真的想知道這個問題的妥善解決......如果MyOtherClass我需要調用例如在MyMainClass的方法,我知道如何:調用方法(個體經營問題)

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

的問題是如果在runSomeMethod中,我指的是self,它是一個不同的self,因爲它是從MyOtherClass中調用的另一個實例。我理解這一點(並知道如何解決它),但請有人教我什麼是正確的方式來處理這個問題,並在需要時調用MyMainClass的原始實例。謝謝!

+0

如果您需要在已經實例化的對象上調用方法,爲什麼不將它存儲在實例變量或屬性中,以便日後可以引用它? –

+0

你在MyMainClass中有MyOtherClass的對象嗎? –

+0

@AaronBrager是的,這基本上是我在做什麼。 – rick

回答

1

您可以使用self對象來調用該方法,而不是創建自己的類的實例。

然後,當您在方法中引用self時,您將使用相同的實例。

所以,你應該打電話給你的方法

[self runSomeMethod]; 

另外,如果你希望你的類以引用一個對象在任何時候,你可能要考慮創建類作爲一個單獨的類,即不管是什麼 - 你的課程總是會發出一個對象。

辛格爾頓WAY

要創建一個單獨的類,去你MyMainClass.h並添加此屬性:

+ (MyMainClass *)singletonInstance; 

然後在您的實現文件,MyMainClass.m添加以下代碼:

//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