加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 3:是否继承NSObject?

发布时间:2020-12-14 05:31:43 所属栏目:百科 来源:网络整理
导读:我已经阅读了一些像 this one这样的帖子,关于在Swift中继承NSObject之间的区别,或者只是让它的本机基类没有子类化.但他们都有点旧帖,我不清楚这个话题. 你什么时候应该继承NSObject?子类化和非子类化之间的实际区别是什么?目前Swift的推荐是什么? Apple’
我已经阅读了一些像 this one这样的帖子,关于在Swift中继承NSObject之间的区别,或者只是让它的本机基类没有子类化.但他们都有点旧帖,我不清楚这个话题.

你什么时候应该继承NSObject?子类化和非子类化之间的实际区别是什么?目前Swift的推荐是什么?

Apple’s documentation about NSObject声明以下内容:

NSObject is the root class of most Objective-C class hierarchies. Through NSObject,objects inherit a basic interface to the runtime system and the ability to behave as Objective-C objects.

正如这表明的那样,只要该类型的实例需要像Objective-C对象(或类本身,在某些更罕见的情况下)那样,您需要为代码中引入的类型继承NSObject.

我不知道超级明确的Apple提供了关于何时不继承NSObject的书面指导,超过suggesting reducing dynamic dispatch或使用不依赖于子类化而是使用protocol extensions的代码重用范例,即代码重用通常是更静态的调度和value type友好的代码重用.我相信尽管大多数Swift程序员已经从Apple获得了提示,并且Swift语言功能作为避免在上述需求不存在的情况下引入基于NSObject的类型的标志.也就是说,作为一般规则,当您实际需要Objective-C动态时,仅引入基于NSObject的类型,最常见的是当您需要与Cocoa API接口时(特别是当您的代码与UI相关时:例如视图控制器,视图).

尽管Swift类中的方法也是虚拟的,但是当您没有使用@objc属性明确标记方法时,编译器能够使用更快的方法调度方法 – 尤其是在Whole Module Optimization is toggled on时,以及在classes are not by default open for subclassing beyond the module that defines the type的Swift 3中更是如此.

除了避免使用NSObject之外,您还可以在编写Swift时完全避免使用基于类的引用类型in many cases.例如,查看上面链接的值类型WWDC视频,或者例如this blog post作为介绍.简而言之,使用值类型可以获得良好的局部推理,通常可以避免动态内存分配和引用计数开销(尽管不是普遍这样 – 带有引用类型的结构,因为字段是警告).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读