Ios4 在构造函数之前调用viewDidLoad
这个问题涉及到。我有两个构造器:Ios4 在构造函数之前调用viewDidLoad,ios4,constructor,memory-management,viewdidload,Ios4,Constructor,Memory Management,Viewdidload,这个问题涉及到。我有两个构造器: - (id)initWithBanner:(NSMutableArray *)banners { if ( self = [super initWithNibName:@"UIBanner" bundle:nil] ) { testString = [[NSString alloc] initWithString:@"Banner"]; NSLog(@"Foo"); } return self; } - (id)initWit
- (id)initWithBanner:(NSMutableArray *)banners {
if ( self = [super initWithNibName:@"UIBanner" bundle:nil] ) {
testString = [[NSString alloc] initWithString:@"Banner"];
NSLog(@"Foo");
}
return self;
}
- (id)initWithPreview:(NSMutableArray *)previews {
if ( self = [super initWithNibName:@"UIBanner" bundle:nil];
testString = [[NSString alloc] initWithString:@"Preview"];
NSLog(@"Foo");
}
return self;
}
- (void)viewDidLoad {
NSLog(@"%@", testString);
}
在另一个对象中,我有两个名为*bannerPreview和*bannerVideo的此类实例,分别用initWithPreview和initWithVideo初始化。发生的情况如下:
在预览构造函数中,我无法访问IBOutlets,因为它们是nil,而它们不在横幅中。但是bannerVideo的viewDidLoad方法在构造函数完成之前被调用,而bannerPreview的viewDidLoad方法则没有。我在类中添加了一个字符串测试,在上面列出的两个方法中添加了一个NSLog(@“Foo”),我的输出是:
2011-03-15 12:29:13.929 iUDC[2600:207] Foo
2011-03-15 12:29:13.934 iUDC[2600:207] preview
2011-03-15 12:29:15.038 iUDC[2600:207] (null)
2011-03-15 12:29:15.038 iUDC[2600:207] Foo
我应该如何处理这种行为 在
init
中执行的操作应该独立于在viewDidLoad
中执行的操作。任何依赖于self.view
的操作都应该在viewDidLoad
中完成
在
init
完成之前还是之后调用viewDidLoad
,取决于加载视图所需的时间以及执行init
所需的时间。您的initWithPreview:
方法中存在错误。它大概应该说:
[super initWithNibName:@"UIPreview" bundle:nil]
所以如果我必须进行一些需要的初始化处理,我应该只在构造函数中启动。对吗?那么销售点呢?它们不是从[super initWithNibName:bundle:]初始化的吗?