ios - @implementation、vars 和 ARC

标签 ios objective-c automatic-ref-counting

在我的项目中有一个带有下一个代码的 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个问题:

  1. 那么为什么 _characterCounter 保留?
  2. 为什么当 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/

相关文章:

iphone - MpMovieplayer 在提醒警报弹出期间崩溃

ios - 关闭 UITableViewController 时出错

ios - 如何通过一个按钮连接两个 View Controller ?

objective-c - NSWIndowController 创建 Nib 加载的 Outlets 序列

ios - UIWebView占用大量内存

objective-c - 如何以编程方式在 iPad 上显示导航 Controller 的下拉列表?

objective-c - <错误> : FT_Open_Face failed: error 85

objective-c - 访问已发布的 NSString 不会使应用程序崩溃

ios - 为什么保留计数在 Debug模式和运行模式下不同?

ios - 保留分配和初始化计数