Tôi đang cố gắng tìm hiểu cách viết plugin bằng cách sử dụng SIMBL. Tôi đã nhận được plugin của tôi để tải với các ứng dụng đích, và cũng biết phương pháp mà tôi muốn ghi đè lên. Tuy nhiên, tôi không thể sử dụng class_getInstanceMethod một cách chính xác dựa trên các đoạn mã trên Internet. Có mọi thứ đã thay đổi trong OSX 10.6 và/hoặc ObjC2 không?Làm thế nào để tự động thay thế một phương thức triển khai thực hiện trong ObjC2?
Các mã sau đây từ culater.net cho "con trỏ dereferencing để loại không đầy đủ" trên báo cáo kết quả thứ hai cuối cùng:
BOOL DTRenameSelector(Class _class, SEL _oldSelector, SEL _newSelector)
{
Method method = nil;
// First, look for the methods
method = class_getInstanceMethod(_class, _oldSelector);
if (method == nil)
return NO;
method->method_name = _newSelector;
return YES;
}
Có một ví dụ đầy đủ về cách ghi đè lên một phương pháp sử dụng plugin SIMBL? Cảm ơn!
Đó làm việc. Cảm ơn! – Abhi
Peter - là nó cũng có thể làm được 'chức năng swizzling', ví dụ: thay thế việc thực hiện một chức năng đó không phải là một phương pháp của một lớp học? – Abhi
Không. Phương thức này hoạt động vì việc triển khai bộ chọn sẽ tự động tra cứu khoảnh khắc bạn gửi tin nhắn — tức là vào thời gian chạy. Có một tên, là bộ chọn, và một giá trị, đó là việc thực hiện, và swizzling hoán đổi một giá trị khác, không giống như thay đổi các giá trị trong một từ điển. Các hàm không được tra cứu động; địa chỉ bị ràng buộc khi tệp thực thi được tải và vẫn cố định sau đó, và cuộc gọi đi trực tiếp đến địa chỉ đó, vì vậy không có gì để remap. –