我正在开发一个实现类方法的应用程序。h 如何访问类方法中的实例变量?
这是我的实例方法,并创建了类“SomeClass”的对象:
-(void)viewDidLoad
{
SomeClass *obj=[SomeClass alloc] init];
}
这是类方法,在这个方法中我试图访问实例变量'obj',所以我收到一条错误消息“实例变量'obj'在类方法中访问”。
+(void)classMethodImplement
{
}
我正在开发一个实现类方法的应用程序。h 如何访问类方法中的实例变量?
这是我的实例方法,并创建了类“SomeClass”的对象:
-(void)viewDidLoad
{
SomeClass *obj=[SomeClass alloc] init];
}
这是类方法,在这个方法中我试图访问实例变量'obj',所以我收到一条错误消息“实例变量'obj'在类方法中访问”。
+(void)classMethodImplement
{
}
您不能从类方法访问实例变量。由于实例变量绑定到类的某些实例,因此从类方法访问它们没有意义,因此语言不允许这样做。
有一种明显的方法可以做到这一点。你只需要使用静态变量。
选项1:
将所需的实例变量存储到静态变量中:
static id static_iVar = nil;
- (void)viewDidLoad {
// blah, blah, blah
static_iVar = _iVar;
}
选项 2:
存储self
到静态变量中,然后根据需要访问其 iVar:
static id static_self = nil;
- (void)viewDidLoad {
// blah, blah, blah
static_self = self;
}
在任一选项中,请格外小心。如果您分配同一类的两个实例而没有进行适当的检查和填充,那么没人知道会出现什么样的错误。
其次,只需在静态方法中使用静态变量即可:
+(void)classMethodImplement
{
// Use it here...
}
重写类方法,使其调用者提供必要的对象。
+(void)classMethodImplement:(SomeClass *)obj
{
}