在我的项目中,有一个控制器A,它有下面的代码:
@implementation NKAddPostViewController
int _characterCounter = 512;
...
我在代码中更改了这个变量,它的值是400。比我做的popViewControllerAnimated
还要多。
但是当我再次到这个控制器时,这个值仍然是400。在viewWillAppear
中,viewDidLoad
仍然是400个。为什么?似乎保留了控制器A,但是当我在viewDidLoad
中调试属性时,它们是nill
,直到它们再次被初始化。
以下是传输的实现,所以没有任何东西保留controllerA:
NKAddPostViewController *aContr = [NKAddPostViewController new];
[self.navigationController aContr animated:YES];
2个问题:
int _characterCounter = 512;
不将512分配给_characterCounter?发布于 2016-04-28 11:25:32
在你的评论中,你说“在实现中像伊瓦尔一样实现,并立即分配价值。第三种方式更容易、更快”。
第三条路错了。"ivar in implementation“实际上是一个私有静态变量,不执行您想要的操作。
您可以在那里创建一个私有类别并定义一个新的实例变量:
在.m文件中添加以下内容:
@interface NKAddPostViewController()
{
int _characterCounter;
}
- (instancetype) init;
{
self = [super init];
if (!self)
return nil;
_characterCounter = 512;
}
做你想做的事。
发布于 2016-04-28 11:43:26
您所做的就是声明一个全局变量。它与全班没有任何关系,而且与它毫无关系。当应用程序加载时(实际上在构建时),分配512的值只发生一次。因为它是全局的,所以您设置的任何值都会一直保持到您再次更改它为止。
如果您想要一个与类相关联的实例变量,请这样声明它.
@implementation NKAddPostViewController
{
int _characterCounter;
}
请注意,不能使用声明初始化变量。使用您的init
覆盖或viewDidLoad:
。
https://stackoverflow.com/questions/36912666
复制相似问题