我使用界面构建器设置了标签栏控制器,每个标签栏项目都链接到一个视图控制器(4个标签,4个视图控制器)。我想知道Interface Builder是否使用-init
方法来初始化视图控制器,因为显然这个方法没有被调用:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
...我想做一些初始化。我无法将其添加到-viewDidLoad
,因为在内存警告的情况下会被召回。有什么想法吗?
答案 0 :(得分:47)
从*.(nib|xib)
加载的对象包含:
- (id)initWithCoder:(NSCoder *)inCoder;
所以你可以覆盖它,或者在调用-initWithCoder:
之后进行设置不是你可以使用的问题:
- (void)awakeFromNib;
来自NSNibAwaking协议的。
答案 1 :(得分:10)
我还要提到initWithCoder
vs awakeFromNib
。
通常,在为对象分配内存或设置值时,我会覆盖initWithCoder
。在连接IBOutlet后需要进行一些设置时,请覆盖awakeFromNib
。在此之前,IBOutlet实例变量与其他视图和控件之间没有连接。
答案 2 :(得分:6)
听起来好像要实施-(void) awakeFromNib
。