Tôi đã thử nghiệm một số isa swizzing với Swift và thấy rằng nó chỉ hoạt động khi NSObject là một siêu cấp (trực tiếp hoặc cao hơn) hoặc bằng cách sử dụng trang trí '@objc'. Nếu không, nó sẽ tuân theo kiểu điều phối tĩnh và vtable-như C ++.
Có bình thường để xác định một lớp Swift không có lớp cơ sở Cocoa / NSObject không? Nếu tôi lo ngại, điều này có nghĩa là đã đề cập nhiều đến tính năng động của Objective-C, chẳng hạn như phương pháp đánh chặn và xem xét nội tâm trong thời gian chạy.
Hành vi thời gian chạy động là trọng tâm của các tính năng như quan sát thuộc tính, Dữ liệu cốt lõi, Lập trình hướng theo khía cạnh , Nhắn tin thứ tự cao hơn , khung phân tích & ghi nhật ký, v.v.
Sử dụng kiểu gọi phương thức của Objective-C thêm khoảng 20 toán hạng mã máy vào một lệnh gọi phương thức, vì vậy trong một số tình huống nhất định ( nhiều lệnh gọi chặt chẽ đến các phương thức có phần thân nhỏ ) C ++ kiểu tĩnh và vtable có thể hoạt động tốt hơn.
Nhưng với quy tắc chung 95-5 ( 95% hiệu suất tăng đến từ việc điều chỉnh 5% mã ), không hợp lý khi bắt đầu với các tính năng động mạnh mẽ và tăng cường ở những nơi cần thiết?