在UIViewController中什么地方初始化一些东西
我有一个UIViewController子类,我试图找出要重写的东西,以便每个对象实例只能运行一次初始化代码。
viewDidLoad
方法可能看起来像是一个明显的答案,但问题是,如果控制器由于内存警告而重置视图, viewDidLoad
可能会运行多次。 initWithNibName:bundle:
, init
和initWithCoder:
方法似乎也是不错的选择,但哪一个重写? awakeFromNib
方法是另一个考虑因素,但似乎并没有在我的视图控制器中执行。
有没有办法做到这一点,我失踪了?
你可能仍然可以使用viewDidLoad,但内部使用一个静态布尔值来查看你是否已经在那里。
static BOOL didInitialize = NO;
if (didInitialize == YES)
return;
didInitialize = YES;
/* initialize my stuff */
UIViewControllers的指定初始化程序,所有其他初始化程序应该调用的方法是-initWithNibName:bundle:
如果您想在创建视图控制器时初始化某些内容,请覆盖该方法。
-viewDidLoad
适用于依赖于控制器视图的任何设置。 正如您指出的那样,该方法可能会运行多次,因为视图可能会多次加载。 -awakeFromNib
不会帮助,除非你的视图控制器本身存在于一个笔尖中,即使这样,只有当你正在初始化的东西依赖于同一个笔尖中的其他对象时才有意义。
+(void)initialize
怎么样? 据我了解,这是iOS为你调用的一个类初始化程序,一次。
上一篇: Where to initialize something ONCE in a UIViewController