我真的想知道这个问题的正确解决方案......如果在MyOtherClass中我需要在MyMainClass中调用一个方法,例如我知道如何:
MyMainClass *class = [MyMainClass alloc] init];
[class runSomeMethod];
问题是如果在runSomeMethod中我引用self它是一个不同的self,因为它是一个从MyOtherClass调用的不同实例。我理解这一点(并知道如何解决它),但请有人教我如何正确处理这个问题,并在需要时调用MyMainClass的原始实例。谢谢!
答案 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
时,它将引用相同的对象。