菜鸟教程小白 发表于 2022-12-13 13:48:57

objective-c - 如何获取定义方法的类,而不是调用方法的实例的类?


                                            <p><p> 返回被调用方法的实例的Class,但是有没有办法获取该方法定义的Class呢?假设 B 类扩展了 A,而 b 是 B 的实例,我想要 A 中的方法返回 A 而不是 B,即使从 b 调用也是如此。</p>

<p><strong>已编辑:</strong></p>

<p>我尝试创建一个具有 -(void)releaseProperties 方法的 NSObject 类别,该方法获取该类中定义的所有属性,并将非只读对象属性设置为 nil。</p>

<pre><code>- (void)releaseProperties {
    unsigned int c = 0;
    objc_property_t *properties = class_copyPropertyList(, &amp;c);

    for(unsigned int i = 0; i &lt; c; i++) {
      objc_property_t property = properties;
      NSString *propertyName = ;
      NSString *propertyType = ;

      if( // is an object
         &amp;&amp; .location == NSNotFound // not readonly
         ) {
            ;
            NSLog(@&#34;%@.%@ = %@&#34;, NSStringFromClass(cls), propertyName, );
      }
    }
    free(properties);
}
</code></pre>

<p>我想在 dealloc 方法中使用这个方法,但是 class_copyPropertyList(, &c) 不会返回定义在它的父类(super class)中的属性,所以 super-dealloc 链不能正常工作。因此,我不想传递 ,而是传递正在调用特定 dealloc 方法的类。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我认为没有直接的方法可以做到这一点,但是您可以使用当前类调用 <code>class_getMethodImplementation_stret</code> 来获取将要调用的方法的函数指针。然后遍历你的父类(super class),用它们调用相同的函数,直到它返回不同的东西。前一个父类(super class)将为您的类提供实现。</p>

<p><strong>编辑:</strong>抱歉,我可能误读了这个问题。如果您正在寻找定义具有该签名的方法的层次结构中的第一个父类(super class),那么您可以遍历调用 <code>respondsToSelector:</code> 的父类(super class),直到其中一个没有。我上面描述的方法是找到提供被继承的<em>实现</em>的父类(super class),而不是<em>定义</em>。</p>

<p>例如,<code>A</code> 类可以定义 <code>foo:</code>,然后是 <code>B</code> 类(<code>A</code> 的子类>) 可以覆盖它,然后类 <code>C</code>(它是 <code>B</code> 的子类)可以询问 <code>foo:</code> 来自哪里。如果你想要提供定义的类,你想要<code>A</code>,并且应该使用我描述的第二种方法。如果你想要提供实现的类,你想要 <code>B</code> 并且应该使用我描述的第一种方法。</p></p>
                                   
                                                <p style="font-size: 20px;">关于objective-c - 如何获取定义方法的类,而不是调用方法的实例的类?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/10617258/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/10617258/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: objective-c - 如何获取定义方法的类,而不是调用方法的实例的类?