当前位置: 首页 > 面试题库 >

通用NSOperation子类失去了NSOperation功能

柯昆
2023-03-14
问题内容

今天,当我试图“通用化”我的“
CoreData导入操作”时遇到了一个奇怪的问题。看来,如果我创建NSOperation的通用子类,main()则不会调用该func。

简单的例子:

class MyOperation<T: NSObject>: NSOperation {

    override func main() {
        println("My operation main was called")
    }
}

如果您创建此类的实例并将其添加到中,operationQueue您将看到main()实际上并没有调用它。

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.operationQueue = NSOperationQueue()
    let operation = MyOperation<NSString>()
    self.operationQueue!.addOperation(operation)
}

操作简单地从过境readyexecutingfinished状态,而无需调用main()

如果我<T: NSObject>MyOperation类中删除通用注释,它将正常工作。

这怎么可能?我在这里想念什么吗?


问题答案:

问题是由以下简单规则引起的:

通用类中的方法无法在Objective-C中表示

结果,当桥接到Objective-C时,它MyOperation看起来像是纯的,没有方法被覆盖,是NSOperation子类。

您可以通过标记看到这个错误override func main()@objc属性。

@objc override func main() {  // < [!] Method in a generic class cannot be represented in Objective-C
    println("My operation main was called")
}


 类似资料:
  • 本文向大家介绍iOS NSOperation queue?相关面试题,主要包含被问及iOS NSOperation queue?时的应答技巧和注意事项,需要的朋友参考一下 答案:存放NSOperation的集合类。 操作和操作队列,基本可以看成java中的线程和线程池的概念。用于处理ios多线程开发的问题。 网上部分资料提到一点是,虽然是queue,但是却并不是带有队列的概念,放入的操作并非是按照

  • 本文向大家介绍Objective-C的NSOperation多线程类基本使用指南,包括了Objective-C的NSOperation多线程类基本使用指南的使用技巧和注意事项,需要的朋友参考一下 NSOperation 一、NSOperation 1.简介 NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作。 NSOperation本身是抽

  • 本文向大家介绍iOS多线程应用开发中使用NSOperation类的基本方法,包括了iOS多线程应用开发中使用NSOperation类的基本方法的使用技巧和注意事项,需要的朋友参考一下 一、NSOperation简介 1.简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue

  • 问题内容: 使用泛型时,我发现了一个奇怪的行为。 在此类中,该成员与以下内容无关: 该类在main中使用: 编译错误为“类型不兼容。必需:找到的字符串:对象”。 似乎Java忘记了使用原始类型时的type参数。 我的Java版本是1.7.0_21 问题答案: 简而言之,由于是原始的,它的非静态成员也变为原始的。 JLS§4.8中对此进行了概述: 更准确地说,原始类型定义为以下之一: 通过采用通用类

  • 🕒岗位/测开 美团4.23上午一面-4.23下午二面 +oc+offer 一天速通,感恩🥹 #暑期#

  • 我正在LocalStream环境(嵌入式flink集群)中运行一个流处理应用程序。我成功地使用我的代码处理了几次特定的数据集。我昨天想在对处理逻辑进行一些修改后重新运行应用程序,但是在大约3/4的数据处理方式之后,flink集群似乎无缘无故地崩溃了。查看浓缩日志-我的评论插入尖括号中 第一条信息是关于我的源代码从s3读取数据并将其收集到flink中。 之后,第一个错误产生:https://gith