【问题标题】:Can I change the super of a class?我可以更改班级的超级吗?
【发布时间】:2011-03-19 13:24:18
【问题描述】:

是否有可能选择一个类的超类(最好在 alloc 或 init 方法中),以便我的类从其他东西继承?

【问题讨论】:

  • 所以你有一辆沃尔沃(汽车)突然决定要成为一头大象(动物)? :)
  • 是的。确切地。你让它听起来不可能......
  • 除非你对 Objective-C 和 Cocoa 内部都有非常非常好的理解,否则你不应该和 alloc 混为一谈为什么要改类?
  • 只是不确定这是否是个好主意 :)
  • 我正在编写一个执行冗长任务的应用程序。它工作正常,每个任务(不是 NSTask 的子类)都有自己的对象并运行自己的 NSTask。那就是超话。 sub 只是改变了一些变量。现在我希望用户可以选择在执行冗长的任务之前预览结果。但这需要对 super 进行一些更改,但我仍然希望对 sub 进行个别更改。

标签: objective-c inheritance subclass superclass


【解决方案1】:

不,你不能。 而且:是的,你可以。

一个类(!)是一个相对静态的东西。它与其超类“硬连线”。这很重要,因为必须有一些东西,知道如​​何处理分配的内存和其他东西。

不同的是一个实例。您可以通过“询问”某个类的类来获得某个类的实例。 (而且,通常,在得到一个之后,你会要求初始化等等。)

此时,通常的行为可能会被“破坏”。但是,我认为,这对初学者来说没什么,你应该在做这些事情时有经验! 为什么?阅读这些东西,Apple 正在谈论这一点。你看,即使是苹果公司也会做这样的事情!看看像 NSNumber 这样的类集群:Cocoa Fundamentals Guide(不能发布超过这个,但没有我的帮助你肯定会找到 NSNumber-documentation。)

【讨论】:

    【解决方案2】:

    您可以在-init 中执行此操作,方法是创建所需目标类的实例并重置self。但是,如果您这样做,请务必向前一个实例发送 -release 消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      相关资源
      最近更新 更多