我应该在这里使用awakeFromNib或initWithCoder吗?
我最初的视图控制器被加载,我需要一个NSArray被初始化,我应该照顾在awakeFromNib
方法或initWithCoder:
方法? awakeFromNib似乎工作更好,因为我不需要返回任何东西,但它的工作原理是以前使用的笔尖文件是正确的? 我不想用一种很快就会破的方法。
并将initWithCoder:
只是看起来像:
- (id)initWithCoder:(NSCoder *)decoder { if (self = [super initWithCoder:decoder]) { self.articles = [[NSMutableArray alloc] init]; } return self; }
-awakeFromNib
在于,您可以在确定与笔尖中其他对象的所有连接都已经build立的情况下执行初始化操作。
nib加载基础结构将一个awakeFromNib消息发送到从nib存档重新创build的每个对象,但仅在存档中的所有对象都已加载并初始化之后。 当一个对象收到一个awakeFromNib消息时,保证所有的出口和动作连接已经build立。
不要忘记打电话给super
。
它不可能很快消失,如果它做了太多的代码使用它,过渡期将是漫长的。 是的,它的名字来自旧的“nib”文件格式,但是这个堆栈溢出问题清除了文件扩展名中的差异。
所以总之,任何方法都可以为你工作,因为你正在为这个类设置一个内部的实例variables。 请注意,在init
方法(包括-initWithCoder
)中,如果setter方法依赖完全初始化的类(源WWDC 2012video移至现代objective-c),那么使用setter方法可能并不安全。 一个例子是设置一个引用nib文件中另一个对象的属性。
在UIViewController
子类中,仅在从故事板加载时调用-initWithCoder。 as -awakeFromNib
被称为是否使用故事板或使用它可能会更有意义。
你可以考虑的另一种模式是懒惰吸气剂:
-(NSMutableArray *)articles{ if (_articles){ return _articles; } _articles = [[NSMutableArray alloc] init]; return _articles; }
这种方法的好处是,如果你想进一步设置arrays,你可以很容易地丢弃arrays,当你不需要它了,下一次你访问属性,你有一个新的一次。
- iOS – 开始iOS教程 – variables之前的下划线?
- 初学者指导在iPhone SDK中进行3D编程
- 一个UIDatePicker用于多个字段 – 设置date时EXC_BAD_ACCESS
- 如何改变UISegmentedControl的圆angular半径?
- 为什么在viewDidUnload中将nil分配给IBOutlet?
- 动画UITableViewCell ContentView在进入编辑模式时淡出
- 什么时候应该使用IBOutlets的弱或强限定符?
- 如何加载NSData到AVPlayerItem?
- NSFileManager:enumeratorAtURL:向NSFileManager返回一个不同forms的URL:URLForDirectory