chr*_*ris 6 iphone cocoa-touch objective-c uiviewcontroller ios
我有一个UIViewController子类,我试图弄清楚要覆盖什么,这样我每个对象实例只能运行一次初始化代码.
该viewDidLoad方法可能看起来是明显的答案,但问题是,viewDidLoad如果控制器由于内存警告而重置视图,则可能会运行多次.的initWithNibName:bundle:,init和initWithCoder:方法也似乎是不错的选择,但覆盖哪一个?该awakeFromNib方法是另一个考虑因素,但似乎没有在我的视图控制器中执行.
有没有办法做到这一点,我错过了?
UIViewControllers的指定初始化程序,所有其他初始化程序应该调用的方法是-initWithNibName:bundle:.如果要在创建视图控制器时初始化某些内容,请覆盖该方法.
-viewDidLoad适用于任何取决于控制器视图的设置.正如您所指出的那样,该方法可能会多次运行,因为视图可能会被多次加载.-awakeFromNib除非你的视图控制器本身存在于一个笔尖中,否则它将无济于事,即使这样,只有你正在初始化的东西依赖于同一个笔尖中的其他对象才有意义.
您可能仍然可以使用 viewDidLoad,但在内部使用静态布尔值来查看您是否已经去过那里。
static BOOL didInitialize = NO;
if (didInitialize == YES)
return;
didInitialize = YES;
/* initialize my stuff */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |