我所知道的关于编程的一切都说实例方法可以调用类方法,但类方法不能调用实例方法。
这篇文章同意...... Call instance method from class method
然而奇迹般地,类方法sharedInstance
设法调用实例方法init
。我错过了什么?
static iRpDatabase *sharedDatabase;
@implementation iRpDatabase
{
}
+(iRpDatabase*)sharedInstance
{
if(sharedDatabase == nil)
{
sharedDatabase = [[self alloc] init];
}
return sharedDatabase;
}
// this is an instance method, called from class method above.
-(id)init
{
if (self = [super init]) {
someInstanceVariable = XYZ;
[self someInstanceMethod];
}
return self;
}
答案 0 :(得分:1)
类方法无法调用实例方法的语句意味着类方法无法调用self
上的实例方法,因为self
表示类,而不是类的实例。 / p>
在sharedInstance
方法中,您正在调用实例方法,但它是在类的特定实例上调用的。没关系。
想想这个例子:
+ (void)someClassMethodOfiRpDatabase {
NSString *str = @"Hello";
NSInteger len = [str length]; // look - I called an instance method
}
此示例与您的sharedInstance
方法问题没有什么不同。在对象的特定实例上调用实例方法是很好的,即使您碰巧在某个类方法中也是如此。