objective-c – 我是否正确地说initWithNibName:bundle用于手动加载nib文件,initWithCoder将用作替代?

objective-c – 我是否正确地说initWithNibName:bundle用于手动加载nib文件,initWithCoder将用作替代?,第1张

概述我不能使用initWithNibName:bundle see,因为我现在正在使用最新的XCode(5).经过一些研究,我找到了另一种选择:initWithCoder. 例: - (id)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self){ // c 我不能使用initWithNibname:bundle see,因为我现在正在使用最新的XCode(5).经过一些研究,我找到了另一种选择:initWithCoder.

例:

- (ID)initWithCoder:(NSCoder *)aDecoder{    self = [super initWithCoder:aDecoder];    if (self){       // code here    }    return self;}

我想要了解的是这是如何替代initWithNibname的?

目前正在学习ios的大书呆子牧场书,这本书是为ios6和之前版本的xode编写的,并试验了coreLocation框架.

在下面的代码中,我已经替换了initWithNibname.我也在早期的教程中使用相同的初始化程序完成了这项工作,但如果我不完全理解一章,我就无法继续学习教程.苹果文档并不总是有意义的.通常,stackoverflow答案和重新阅读的组合有助于事物陷入困境.

- (ID)initWithCoder:(NSCoder *)aDecoder{    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 it location immediately        [locationManager startUpdatingLocation];    }    return self;}

上面的代码是做什么的?它看起来像一个指定的初始值设定项,但参数的名称和返回类型让我感到困惑.欣赏会在这里有所帮助.

亲切的问候

更新:

从我在XCode 5中收集的内容中鼓励使用故事板,我没有看到不使用故事板的选项.我正在阅读本书的教程是使用XCode 4.3,其中可以使用nib.

解决方法 NSCoding https://developer.apple.com/library/mac/documentation/cocoa/reference/foundation/Protocols/NSCoding_Protocol/Reference/Reference.html

为了理解此方法对于来自笔尖(或故事板)的视图控制器的影响,您必须了解NSCoding.

使用NSCoding取消归档对象时,您将获得它拥有的所有对象的级联效果. initWithCoder:被发送到一个对象,它被解冻,然后被发送到它拥有的对象等.

这是nib加载系统用于解冻您在界面构建器中创建的所有对象的内容.

以下是nib加载系统所做的快速概述(来自文档)

> nib文件和引用的资源被加载到内存中
>在nib中创建的对象图是未归档的(NSCoding)这实际上取决于对象的类型. UIVIEws被发送到initWithFrame,UIVIEwControllers被发送到initWithcoder,因为它们符合NSCoding,所有其他对象都只是发送init.
>使用setValue:forKey:和setTarget:action:分别建立所有出口和 *** 作连接(您的IBOUtlets和IBActions).
>然后将awakeFromNib发送到nib中的所有对象

在此处查看对象加载过程部分下的更多详细信息.
https://developer.apple.com/library/ios/documentation/cocoa/conceptual/LoadingResources/CocoaNibs/CocoaNibs.html

关键是当使用nib或storyboard时,将从vIEwController调用initWithCoder,因为这是系统解冻对象图的方式,以及您在界面构建器中对这些对象设置的属性.

还要记住,故事板只是一组nib文件,其中包含一些描述它们相关性的元数据.

总结

以上是内存溢出为你收集整理的objective-c – 我是否正确地说initWithNibName:bundle用于手动加载nib文件,initWithCoder将用作替代?全部内容,希望文章能够帮你解决objective-c – 我是否正确地说initWithNibName:bundle用于手动加载nib文件,initWithCoder将用作替代?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1013533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存