在我的项目中有一个带有下一个代码的 Controller A:
@implementation NKAddPostViewController
int _characterCounter = 512;
...
我在代码中更改了这个变量,它的值为 400。比我做的 popViewControllerAnimated
。
但是当我再次访问这个 Controller 时,值仍然是 400。在 viewWillAppear
中,viewDidLoad
它仍然是 400。为什么? 看起来 Controller A 被保留,但是当我在 viewDidLoad
中调试属性时,它们是 nill
直到它们被再次初始化。
这里是传输的实现,所以没有保留controllerA:
NKAddPostViewController *aContr = [NKAddPostViewController new];
[self.navigationController aContr animated:YES];
2个问题:
- 那么为什么 _characterCounter 保留?
- 为什么当 Controller 初始化行
int _characterCounter = 512;
不要将 512 分配给 _characterCounter?
最佳答案
您所做的是声明一个全局变量。它根本与类(class)无关,并且与类(class)完全无关。分配 512 的值发生在应用程序加载时(实际上是在构建时),并且只“发生”一次。因为它是全局的,所以您设置的任何值都会保留,直到您再次更改它。
如果你想要一个绑定(bind)到类的实例变量,像这样声明它......
@implementation NKAddPostViewController
{
int _characterCounter;
}
请注意,您不能使用声明来初始化变量。使用您的 init
覆盖或 viewDidLoad:
。
关于ios - @implementation、vars 和 ARC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36912666/