【问题标题】:Ambiguity regarding the usage of NSObject?关于 NSObject 的使用有歧义?
【发布时间】:2015-11-20 16:43:15
【问题描述】:

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

我的问题是,如果我们要创建一个新类,该类是否必须继承根类 Foundation (ie), NSObject 或者它是可选的,因为现在我们在 xcode 中有 swift file 模板。

 import UIKit

 class Myclass: NSObject {

 }

import UIKit

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

     }

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

【问题讨论】:

    标签: swift nsobject foundation


    【解决方案1】:

    可选。

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

    Swift 类不继承自通用基类。您在未指定超类的情况下定义的类会自动成为您构建的基类。

    【讨论】:

      【解决方案2】:

      您不必从 NSObject 继承。但是,如果您想要某些运行时功能,您可能希望从 NSObject 继承。例如,如果你想使用 KVO(Key Value Observing),或者你想做一些更高级的事情,比如方法 swizzling。

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

      【讨论】:

        【解决方案3】:

        使用和不使用NSObject 之间存在相当大的差异。

        Jasper Blues 写了一个nice explanation 使用NSObject 的利弊。

        长话短说:

        在 Swift 中子类化 NSObject 可以为您提供 Objective-C 运行时的灵活性,同时也可以提高 Objective-C 的性能。如果您不需要 Objective-C 的灵活性,则避免使用 NSObject 可以提高性能。

        【讨论】:

          【解决方案4】:

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

          例如,如果您希望您的类符合NSCoding 协议,或任何标准委托或数据源协议(例如UITableViewDataSource),那么通过继承您将省去很多麻烦来自NSObject。我同意除非你需要,否则不要继承的建议,但我发现在使用 Apple 的 API 时经常需要它。

          【讨论】:

            猜你喜欢
            • 2020-11-26
            • 2012-10-10
            • 2016-05-07
            • 1970-01-01
            • 1970-01-01
            • 2014-08-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多