我正在开发一个应用程序,其中实现了一个类方法。如何在类方法中访问实例变量?
这是我的实例方法,创建了一个名为“SomeClass”的对象:
-(void)viewDidLoad
{
SomeClass *obj=[SomeClass alloc] init];
}
这里是一个类方法,在这个方法中我试图访问实例变量"obj",结果出现了一个错误,提示"在类方法中访问实例变量'obj'"。
+(void)classMethodImplement
{
}
我正在开发一个应用程序,其中实现了一个类方法。如何在类方法中访问实例变量?
这是我的实例方法,创建了一个名为“SomeClass”的对象:
-(void)viewDidLoad
{
SomeClass *obj=[SomeClass alloc] init];
}
+(void)classMethodImplement
{
}
你不能从类方法中访问实例变量。因为实例变量是绑定到某个类的特定实例上的,从类方法中访问它们是没有意义的,因此编程语言不允许这样做。
有一个明显的方法可以实现。你只需要使用静态变量。
选项1:
将想要的实例变量存储到静态变量中:
static id static_iVar = nil;
- (void)viewDidLoad {
// blah, blah, blah
static_iVar = _iVar;
}
选项2:
将self
存储到静态变量中,然后随意访问其实例变量:
static id static_self = nil;
- (void)viewDidLoad {
// blah, blah, blah
static_self = self;
}
无论哪种选择,请务必非常小心。如果您在未进行适当检查和处理的情况下分配了两个相同类的实例,则无人知道可能出现什么样的错误。
其次,只需在静态方法中使用静态变量:
+(void)classMethodImplement
{
// Use it here...
}
+(void)classMethodImplement:(SomeClass *)obj
{
}