29
Phương thức hoạt động mạnh mẽ cho các phương pháp ví dụ. Bây giờ, tôi cần phải thực hiện một phương pháp lớp học. Bất kỳ ý tưởng làm thế nào để làm điều đó?Làm thế nào để làm lộn xộn một phương thức lớp học trên iOS?
Cố gắng này, nhưng nó không hoạt động:
void SwizzleClassMethod(Class c, SEL orig, SEL new) {
Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(c, new);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}
Mmm ... Giả sử chúng ta thay thế 'Class cc = object_getClass ((id) c)'. Có thể hiểu được rằng bạn cần thêm phương thức vào 'cc', nhưng tại sao bạn lại sử dụng phương thức lớp từ' cc'? Bạn không phải là phương pháp lớp học từ 'c'? Tôi đang bối rối ... – Yuji
Yuhi, bạn nói đúng, tôi đã thay đổi mã để thực hiện độ phân giải của phương thức trên lớp gốc, không phải lớp meta. Các giải pháp cũ đã làm việc cũng vì vậy tôi đã không thực sự bận tâm. –
Tệ của tôi. Tôi đã nhập sai object_getClass vào objc_getClass. Tôi sẽ xóa câu trả lời của tôi trong một giây. –