问题描述
|
我有一个UIViewController子类,我试图找出要覆盖的内容,以便每个对象实例只能运行一些初始化代码。
viewDidLoad
方法似乎是显而易见的答案,但问题是,如果控制器由于出现内存警告而将视图重置,则viewDidLoad
可能会运行多次。 initWithNibName:bundle:
,init
和initWithCoder:
方法似乎也是不错的选择,但是哪一个要覆盖? awakeFromNib
方法是另一个考虑因素,但似乎未在我的视图控制器中执行。
有没有办法做到我所缺少的?
解决方法
您可能仍然可以使用viewDidLoad,但是在内部使用一个静态布尔值来查看您是否已经去过那里。
static BOOL didInitialize = NO;
if (didInitialize == YES)
return;
didInitialize = YES;
/* initialize my stuff */
, UIViewControllers的指定初始化方法(所有其他初始化方法都应调用的方法)为ѭ7。如果要在创建视图控制器时初始化某些内容,请重写该方法。
-viewDidLoad
用于表示取决于控制器视图的任何设置。如您所指出的,该方法可能会运行多次,因为视图可能会加载多次。除非您的视图控制器本身存在于笔尖中,否则-awakeFromNib
将无济于事,即使如此,仅当您要初始化的东西依赖于同一笔尖中的其他对象时,这才有意义。
, +(void)initialize
呢?据我所知,这是一个iOS初始化类的类初始化程序。