Sự khác biệt giữa đánh dấu một phương thức là @objc và dynamic là gì, và khi nào thì bạn nên sử dụng một trong hai cách?

{{FormatNumbertoThousand(model.total_like)}} lượt thích
39 lượt xem
Objective-C master

Một hàm/ biến được khai báo với @objc có thể truy cập từ mã Objective-C, nhưng Swift vẫn sẽ tiếp tục truy cập nó trực tiếp thông qua cơ chế static hoặc virtual dispatch. Điều này có nghĩa là nếu hàm/biến này được swizzled thông qua framework Objective-C, như khi sử dụng Key-Value Observing hoặc các API Objective-C khác để sửa đổi các lớp, việc gọi phương thức từ Swift và Objective-C sẽ sản sinh kết quả khác nhau.

Khi sử dụng dynamic, Swift luôn thực hiện việc gọi thông qua Objective-C dynamic dispatch. Điều này là cần thiết cho các chức năng như Key-Value Observing hoạt động đúng. Khi gọi hàm Swift, nó sẽ tham chiếu đến runtime của Objective-C để thực hiện việc gọi theo dynamic dispatch.

Câu hỏi tiếp theo: Hiện tượng Memory leak là gì?
{{login.error}}