【问题标题】:Why value of property is kept when viewDidLoad is called again为什么再次调用 viewDidLoad 时会保留属性的值
【发布时间】:2018-10-23 11:20:39
【问题描述】:

我在类中有一个属性,默认值为 false

@implementation viewController1

BOOL variable1 = false;

viewDidLoad 第一次调用时。它的值为假。然后我在一个方法中将其更改为 true。下一次 viewDidLoad 调用 variable1 的值是 true。
但默认值为假。这意味着它保持了价值? 我可以修复它,但在 viewDidLoad 中初始化它,但我想知道原因。

我用这些代码再次初始化它:

UINavigationController *nc1;

ViewController1 * viewController1 = [[ViewController1 alloc] init];
    UITabBarItem *tab1 = [[UITabBarItem alloc] init];
    [tab1 setTitle: @”tab1”;
    nc1 = [[UINavigationController alloc] init];
    [viewController1 setTabBarItem:tab1];
    nc1.viewControllers = [NSArray arrayWithObjects: viewController1, nil];


[navigations addObject:nc1];

tabController.viewControllers = navigations;

【问题讨论】:

  • 如果您想重置所有值,那么您应该为视图控制器创建新实例。再次调用 viewdidload 不会重置所有值。
  • @RajeshKumarR 谢谢。我添加了一些关于如何初始化它的细节

标签: objective-c


【解决方案1】:

这不是类中的属性(或实例变量)。那是文件中的一个全局变量。

实例变量需要用大括号括起来:

@implementation viewController1 {
    BOOL variable1 = false;
}

- (void)viewDidLoad {
    // code
}

@end

没有大括号,variable1 只是一个与类实例无关的全局变量。这就是为什么当你创建一个新的视图控制器时它似乎保留了它的旧值。

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多