我正在创建一个UIViewController
子类,我使用自定义初始化函数initWithImages:(NSArray *)images
创建它,然后返回视图控制器以供使用。
但是我对init
与viewDidLoad
,viewWillAppear
等功能应该做的事情感到困惑。在这个init
函数中,我设置了图像视图,一个标题标签并给它设置了手势识别器,但这些东西只应在加载或出现时才能完成吗?
init
应该尽可能小吗?我在每个中添加什么基本上都是我的问题?
我正在使用带有UIViewController
的{{1}} s,所以重要的是即使页面视图控制器中有一堆视图控制器也没有荒谬地使用内存,所以我想制作我确定我做对了。
答案 0 :(得分:4)
init
应该用于与数据相关的基本初始化。 viewDidLoad
应该用于基于视图的初始化,因为该视图已在该时间点创建,因此您可以添加子视图。如果您还不能使用它们,那么创建子视图是没有意义的。
答案 1 :(得分:3)
主要区别在于self方法不是在init方法中创建的。所以像
一样[self.view addSubview:some_subview]
应放在viewDidLoad
中按以下顺序调用UIViewController方法:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- (void)loadView;
- (void)viewDidLoad;
- (void)viewWillAppear:(BOOL)animated;
- (void)viewDidAppear:(BOOL)animated;
答案 2 :(得分:1)
init在viewDidLoad之前调用,大多数UI组件在init中不可用。使用它来初始化变量,数组等。任何不需要任何UI组件调用的东西。
viewDidLoad表示视图已加载,并且UI组件可用于设置内容,例如,在文本字段中设置值。
所以你应该在viewDidLoad中设置图像视图,标题标签和手势识别器,而不是在init中。