@implementation,vars和ARC
在我的项目中有一个控制器A与下一个代码:
@implementation NKAddPostViewController int _characterCounter = 512; ...
我在代码中更改这个variables,它的值是400.比我做popViewControllerAnimated
。
但是当我再次去这个控制器的值仍然是400.在viewWillAppear
, viewDidLoad
它仍然是400. 为什么? 看来,控制器A保留,但是当我在viewDidLoad
debugging属性,他们是n直到他们再次初始化。
这里是执行转移,所以没有保留controllerA:
NKAddPostViewController *aContr = [NKAddPostViewController new]; [self.navigationController aContr animated:YES];
2个问题:
- 那么为什么_characterCounter保留?
- 为什么当控制器初始化行
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: