2015-04-22 14 views
7

Làm cách nào để tìm ra, khi chạy, nếu một lớp ghi đè lên một phương thức của siêu lớp của nó? Ví dụ, tôi muốn tìm hiểu xem một lớp học có thực hiện riêng của nó là isEqual: hoặc hash, thay vì dựa vào một lớp học siêu đẳng cấp.Tìm hiểu xem một lớp Objective-C có ghi đè lên phương thức

+0

Vui lòng làm rõ. Bạn đang nói về việc tìm kiếm một cái gì đó trong tài liệu? Một số loại kiểm tra thời gian chạy? Gì? – rmaddy

+0

@rmaddy Ông rõ ràng đang hỏi về việc kiểm tra xem một phân lớp có chứa tùy chỉnh thực hiện một phương thức được khai báo trong siêu lớp của nó hay không. Và câu hỏi cũng chứa thẻ runtime-c. –

+0

@DominikHadl Vâng, đó là chính xác những gì tôi muốn. Tôi muốn làm điều này trong thời gian chạy. Giả sử tôi không có tài liệu cho lớp nói trên. – cfischer

Trả lời

4

Bạn chỉ cần để có được một danh sách các phương pháp, và tìm kiếm một trong những bạn muốn:

#import <objc/runtime.h> 

BOOL hasMethod(Class cls, SEL sel) { 
    unsigned int methodCount; 
    Method *methods = class_copyMethodList(cls, &methodCount); 

    BOOL result = NO; 
    for (unsigned int i = 0; i < methodCount; ++i) { 
     if (method_getName(methods[i]) == sel) { 
      result = YES; 
      break; 
     } 
    } 

    free(methods); 
    return result; 
} 

class_copyMethodList chỉ trả về các phương pháp được định nghĩa trực tiếp trên lớp trong câu hỏi, không superclasses, do đó nên ý bạn là gì

Nếu bạn cần phương pháp lớp học, hãy sử dụng class_copyMethodList(object_getClass(cls), &count).

+0

Tuyệt vời, cảm ơn bạn rất nhiều! – cfischer

Các vấn đề liên quan