initWithCoder方法中的aDecoder在cocoa-touch中做了什么?

时间:2013-10-17 23:17:40

标签: ios objective-c cocoa-touch

关于我的previous post关于UIViewControllers指定的初始值设定项initWithCoder,我还有另一个关于参数aDecoder传递给协议方法的问题。

以下是相关代码:

@implementation WhereamiViewController

- (id)initWithCoder:(NSCoder *)aDecoder //we're overiding the superclasses (UIViewController) inititalizer
{
    self = [super initWithCoder:aDecoder];

    if (self){
        //create location manager object
        locationManager = [[CLLocationManager alloc] init];

        //there will be a warning from this line of code
        [locationManager setDelegate:self];

        //and we want it to be as accurate as possible
        //regardless of how much time/power it takes
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

        //tell our manager to start looking for its location immediately
        [locationManager startUpdatingLocation];
    }

    return self;
}

我对aDecoder很好奇所以重命名它以查看我的代码是否仍然可以正常工作。我想知道的是,作为参数传递给initWithCoder究竟是什么?似乎我的代码中没有任何内容。参数是否只是方法的一部分,即使没有传递给它,也必须显示?其他时候我创建了指定的初始化程序,我已经这样做了:

self = [super init]

init是NSObjects指定的初始化器吗?

这是我不理解的代码的唯一部分。我看到我正在调用我的超类初始化程序,然后使用其他自定义代码实现它/使其成为selfs(whereamiviewcontroller)值。

我确实设置了一个标记,然后查看日志,看看是否有任何东西会引起我的注意但是没有运气。

提前致谢
此致

1 个答案:

答案 0 :(得分:2)

当您尝试从nib或storyboard初始化视图控制器实例时,可以看到-initWithCoder:方法正在运行。在这种情况下,Cocoa Touch将使用UINibDecoder初始化的-initWithCoder:实例从xml解码控制器元素。