我有两个Objective-C类,它们通过方法参数传递变量来相互通信。例如,我可能会调用一个传递变量的方法:
ClassX *x = [[ClassX alloc] init];
[x passThisParameter:i];
ClassX
方法内passThisParameter
成功收到变量。我可以通过断点和日志输出来确认:
- (void)passThisParameter:(id)object {
self.classVariable = object;
NSLog(@"Object: %@", self.classVariable); // In the log I can see that classVariable has the same value as object does.
}
但是,当我尝试在上述范围之外使用classVariable
时(例如,在另一个方法中,但在同一个类中),它总是显示为NULL
。 为什么我的classVariable
会重置为NULL?以下是我以后检索变量的方法:
- (void)anotherMethodFromClassX {
NSLog(@"Class Variable: %@", self.classVariable); // This is always NULL even though the variable is never used anywhere else (except when it's set in the method above)
}
我还尝试在我的类定义/标头和实现中以各种方式设置变量:
@property (retain) id classVariable
@property (strong) id classVariable
@property (assign) id classVariable
@property (nonatomic, strong) id classVariable
有关为什么此classVariable重置为NULL
的任何想法?我无法弄清楚,在谷歌上找不到多少。如果我的某些编程术语不正确,请原谅我。
编辑:在我设置ClassX
可以重置为classVariable
之后,是否可以重新分配并重新初始化NULL
?说它在UI中重新加载......
编辑:这是我的ClassX
和ClassZ
及相关代码available online。
答案 0 :(得分:1)
所有@property
变体都是实例变量,因此您设置的值将设置在实例上,而不是类。所以,当你不做任何事情来保留x
并且它被ARC摧毁时,它就会随之而来。下次创建ClassX
的新实例时,它是干净清新的,因此值为nil
。解决方案是保留x
并重用它而不是允许它被销毁(并对类和实例变量进行一些研究)。