0

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

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

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

4

1 回答 1

1

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

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

所以,你应该把你的方法称为

[self runSomeMethod];

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

单例方式

要创建一个单例类,请转到您的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's 对象时,只需使用[[MyMainClass singletonInstance] runSomeMethod]. 此外,当您self现在使用时,它将引用同一个对象。

于 2013-07-24T01:46:04.470 回答