@implementation,vars和ARC

在我的项目中有一个控制器A与下一个代码:

@implementation NKAddPostViewController int _characterCounter = 512; ... 

我在代码中更改这个variables,它的值是400.比我做popViewControllerAnimated

但是当我再次去这个控制器的值仍然是400.在viewWillAppearviewDidLoad它仍然是400. 为什么? 看来,控制器A保留,但是当我在viewDidLoaddebugging属性,他们是n直到他们再次初始化。

这里是执行转移,所以没有保留controllerA:

 NKAddPostViewController *aContr = [NKAddPostViewController new]; [self.navigationController aContr animated:YES]; 

2个问题:

  1. 那么为什么_characterCounter保留?
  2. 为什么当控制器初始化行int _characterCounter = 512; 不要将_characterCounter分配给512?

在你的评论中,你说“3)像伊娃实施,并立即赋值。第三方更容易,更快”

第三种方法是错误的。 “伊娃在实施”实际上是一个私人静态variables,并没有做你想做的。

您可以创build一个私有类别并在其中定义一个新的实例variables:

在你的.m文件中添加这个:

 @interface NKAddPostViewController() { int _characterCounter; } - (instancetype) init; { self = [super init]; if (!self) return nil; _characterCounter = 512; } 

这应该做你想要的。

你所做的是声明一个全局variables。 它根本不和class级绑在一起,完全没有任何关系。 分配512的值发生在应用程序加载时(确实是在构build时),并且只发生一次。 因为它是全球性的,所以你设置的任何值都会保留,直到你再次改变它。

如果你想要一个绑定到类的实例variables,就像这样声明…

 @implementation NKAddPostViewController { int _characterCounter; } 

请注意,您不能用声明初始化variables。 使用你的init覆盖或viewDidLoad: