关于 NSObject 用法的歧义?

Ambiguity regarding the usage of NSObject?

我是 ios 开发的新手,开始使用 swift 编码,我有一些关于 NSOject 的基本问题,我找不到任何满意的答案。

我的问题是,如果我们要创建一个 new class,class 是否必须 inherit 来自基础的 root classNSObject 或者它是可选的,因为现在我们有 swift 文件 模板在xcode.

 import UIKit

 class Myclass: NSObject {

 }

import UIKit

     class Myclass {  // where here myclass is the base class

     }

任何帮助将不胜感激...

可选。

来自文档 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Inheritance.html

Swift classes do not inherit from a universal base class. Classes you define without specifying a superclass automatically become base classes for you to build upon.

您不必继承自 NSObject。但是,如果您需要某些运行时功能,您可能希望从 NSObject 继承。例如,如果你想使用 KVO(键值观察),或者你想做一些更高级的事情,比如方法调配。

一般来说,我建议不要从 NSObject 继承,除非你发现需要它的问题。

使用和不使用NSObject有很大区别。

Jasper Blues 写了 nice explanation 使用 NSObject 的优缺点。

长话短说:

Subclassing NSObject in Swift gets you Objective-C runtime flexibility but also Objective-C performance. Avoiding NSObject can improve performance if you don't need Objective-C's flexibility.

以上答案是正确的,但在很多情况下您仍然可以 need/want 继承 NSObject。 @先生。比尔兹利提到了一对。我要补充一点,如果您正在与 Cocoa/Cocoa Touch API 或许多 Apple 的其他框架进行交互,出于互操作性的原因,您可能希望继承 NSObject

例如,如果您希望 class 符合 NSCoding 协议,或任何标准委托或数据源协议(例如 UITableViewDataSource),则从 NSObject 继承,你会省去很多麻烦。我同意除非需要就不要继承的建议,但我发现在使用 Apple 的 API 时通常需要这样做。