gpt4 book ai didi

ios - @implementation、vars 和 ARC

转载 作者:行者123 更新时间:2023-11-29 01:01:49 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com