如何在Objective-C中的类方法中访问实例变量?

ven*_*kat 5 objective-c

我正在开发一个应用程序,在其中我实现了一个类method.h如何在类方法中访问实例变量?

这是我的实例方法,并且创建了一个"SomeClass"类的对象:

-(void)viewDidLoad
{
   SomeClass *obj=[SomeClass alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

这是类方法,在这个方法中我试图访问实例变量'obj',所以我得到一个错误,说"实例变量'obj'访问类方法".

+(void)classMethodImplement
{

}
Run Code Online (Sandbox Code Playgroud)

小智 15

您无法从类方法访问实例变量.由于实例变量绑定到类的某些实例,因此从类方法访问它们没有意义,因此语言不允许它.


Maz*_*yod 9

有一种明显的方法可以做到这一点.你只需要使用静态变量.

选项1:

将所需的实例变量存储到静态变量中:

static id static_iVar = nil;
- (void)viewDidLoad {
    // blah, blah, blah
    static_iVar = _iVar;
}
Run Code Online (Sandbox Code Playgroud)

选项2:

存储self到静态变量中,然后根据需要访问其iVars:

static id static_self = nil;
- (void)viewDidLoad {
    // blah, blah, blah
    static_self = self;
}
Run Code Online (Sandbox Code Playgroud)

在任何一种选择中,请格外小心.如果你分配同一个类的两个实例而没有做适当的检查和事情,没有人知道会出现什么样的错误.

其次,只需在静态方法中使用静态变量:

+(void)classMethodImplement
{
    // Use it here...
}
Run Code Online (Sandbox Code Playgroud)