来自另一个类的调用方法(自我问题)

时间:2013-07-24 01:08:10

标签: ios macos cocoa object self

我真的想知道这个问题的正确解决方案......如果在MyOtherClass中我需要在MyMainClass中调用一个方法,例如我知道如何:

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

问题是如果在runSomeMethod中我引用self它是一个不同的self,因为它是一个从MyOtherClass调用的不同实例。我理解这一点(并知道如何解决它),但请有人教我如何正确处理这个问题,并在需要时调用MyMainClass的原始实例。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用self对象来调用该方法,而不是创建自己的类的实例。

然后,当您在方法中引用self时,您将使用相同的实例。

因此,您应该将您的方法称为

[self runSomeMethod];

或者,如果您希望您的课程始终引用一个对象,您可能需要考虑将您的类创建为单例类,即无论如何 - 您的类将始终发出一个对象。

SINGLETON 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时,它将引用相同的对象。