我最近在我的应用程序中遇到了一个问题,我在UIViewController子类的-awakeFromNib方法中创建的一些子视图正 从视图中消失.经过一番探索之后,我发现移动我输入的代码-awakeFromNib来-viewDidLoad解决问题.-awakeFromNib当UIViewController从nib中取消归档时,似乎只调用一次,并且-viewDidLoad每次取消归档视图时都会调用它.
那么最佳做法是什么?看起来UIViewController -awakeFromNib不应该向视图添加任何视图,应该完成那种东西-viewDidLoad.我理解正确吗?还是我比我想的更困惑?
Lil*_*ard 65
awakeFromNib当控制器本身从笔尖取消归档时调用.viewDidLoad在创建/取消存档视图时调用.当控制器的视图存储在单独的nib文件中时,这种区别尤为重要.
Prc*_*ela 24
同样重要的是,awakeFromNib从内存警告恢复后永远不会调用该函数.但是,该viewDidLoad函数将被调用.
Meh*_*ari 12
是的,这是对的.你不应该真的依赖于awakeFromNib做那种任务.
awakeFromNib类似于在.NET中反序列化后调用的事件.viewDidLoad类似于Load.NET中的事件.
如果您熟悉.NET中的概念,我认为这应该足够了.
我将尝试通过举例来回答:
如果定义customCell类和customCell.xib文件,然后通过使用加载单元格
- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options,则在取消归档xib中的对象时调用awakeFromNib.
如果您定义了a customViewController,那么在customViewController使用时创建- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil.viewDidLoad在加载到视图层次结构中时将被调用.
一些相关的混淆方法:
(空隙)的loadView; 这是子类在不使用nib时应创建自定义视图层次结构的位置.如果未指定nib名称,则loadView将尝试加载名称与视图控制器类相同的nib.如果不存在这样的nib,则必须在调用-view之前调用-setView:或覆盖-loadView方法以编程方式设置视图.永远不应该直接调用-loadView.
(void)viewDidLoad:在加载视图后调用.对于在代码中创建的viewControllers,这是在-loadView之后.对于从nib取消归档的视图控制器,这是在设置视图之后.
| 归档时间: |
|
| 查看次数: |
48025 次 |
| 最近记录: |