Swift 3:是否继承NSObject?

前端之家收集整理的这篇文章主要介绍了Swift 3:是否继承NSObject?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了一些像 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作为介绍.简而言之,使用值类型可以获得良好的局部推理,通常可以避免动态内存分配和引用计数开销(尽管不是普遍这样 – 带有引用类型的结构,因为字段是警告).

猜你在找的Swift相关文章