我有一个使用类方法的Utility类。我试图在课堂方法中引用自我,但不能。我想知道如何在类方法中声明以下内容:
[MRProgressOverlayView showOverlayAddedTo:self.window animated:YES];
self.window
它表示成员引用类型struct objc_class *' is a pointer; maybe you meant to use '->'
与无法调用self
相关的另一个问题是,如何在我的@property
中的类方法中引用.h
中声明的.m
。
这是我的班级方法:
.m
+ (void)showHUD
{
[UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
[MRProgressOverlayView showOverlayAddedTo:self.window animated:YES];
//I would preferably like to call my property here instead
}
.h
@property (nonatomic) MRProgress * mrProgress;
答案 0 :(得分:9)
类方法的重点在于它不是特定实例的一部分。在类方法中,self
是类。
如果需要绑定到特定实例,那么它应该是实例方法。如果你想要一个访问特定实例的静态方法,那么将该实例(self
)传递给它(虽然很难想象很多情况下这是有意义的。)
在上面的例子中,showHUD
几乎可以肯定是一个实例方法。如果由于某种原因这没有意义,那么它应该是:
+ (void)showHUDForWindow:(UIWindow *)window;
然后,您可以将其称为showHUDForWindow:self.window
并根据需要使用它。
答案 1 :(得分:0)
您可以使用单件模式。单例模式假定您的类的唯一实例存在。由于它是唯一的实例,因此您可以从类方法中使用它。
示例实施:
+ (MyClass*)sharedInstance {
static dispatch_once_t once;
static MyClass *sharedMyClass;
dispatch_once(&once, ^ {
sharedMyClass = [[self alloc] init];
});
return sharedMyClass;
}
然后,您可以通过[MyClass sharedInstance]
访问共享实例,例如:
+ (void)doSomethingCool {
[[self sharedMyClass] doSomething];
}