【问题标题】:Get class type in shared objective-c method?在共享的objective-c方法中获取类类型?
【发布时间】:2010-07-09 05:42:46
【问题描述】:

在 Objective-C 中有 Alloc/Init 隐喻。他们还添加了一个名为“new”的共享便捷方法,它在内部只是连续调用两者。如果我创建一个名为 FooClass 的 NSObject 子类,FooClass 会选择那些共享方法,包括“新”。

但是……这到底是怎么实现的??

它不能简单地委托给基类,因为这只会实例化 NSObject 的实例,而不是您的派生类 FooClass,但它仍然有效!那么有人会怎么写类似的东西呢?

也就是说,基类不应该是这个……

  + (id) somethingLikeNew{
        return [[NSObject alloc] init];  
    }

而是这个……

  + (id) somethingLikeNew{
        return [[<SomethingThatMapsToFooClassType> alloc] init];  
    }

...其中“SomethingThatMapsToFooClassType”是继承自 NSObject 的派生类的类型,需要获取共享方法“somethingLikeNew”。

基本上,我从 NSObject 添加了一个类别,并且我有需要知道类型的共享方法,但实现都是通用的,因此进入 NSObject 的一个类别,而不是我的类文件中的所有位置(就像你没有到处都有“新”一样。它就在那里。)

有人吗?布勒?比勒?

M

【问题讨论】:

    标签: objective-c class subclass shared


    【解决方案1】:

    在任何 Objective-C 方法中,self(隐式)参数指的是接收者。对于类方法,selfClass 对象。所以多态类方法可以像这样实现

    + (id)somethingLikeNew
    {
       return [[self alloc] init];
    }
    

    【讨论】:

    • 大声笑...我想我们是同时发布的。我只是自己说的!
    • 最好自己找出答案。干得好。
    【解决方案2】:

    哈!发布后两秒钟我自己找到了它!您可以在共享方法中使用 'self' 来表示派生类的类类型,所以上面的内容只是......

      + (id) somethingLikeNew{
            return [[self alloc] init];  
        }
    

    该死,这很容易!希望这对其他人有帮助!

    M

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多