Khi chạy, khi một tin nhắn được gửi đến một đối tượng, đối tượng mà đi vào lớp mà tạo ra nó và nói:. "Tôi đã gửi thông điệp này Chạy mã của phương thức khớp . " Điều này khác với hầu hết các ngôn ngữ biên dịch, trong đó phương thức được thực hiện được xác định tại thời gian biên dịch.
LÀM THẾ NÀO ĐỂ BIỂU MỌI BIỂU TÀU KHÓA HỌC BẬC?
Nó sử dụng con trỏ isa. Mỗi đối tượng có một biến cá thể gọi là isa. Khi một đối tượng được tạo ra, lớp sẽ đặt biến cá thể isa của đối tượng trả về để trỏ trở lại lớp đó. Nó được gọi là con trỏ isa vì một đối tượng "là một" thể hiện của lớp đó. Mặc dù bạn có thể sẽ không bao giờ sử dụng con trỏ isa một cách rõ ràng, sự tồn tại của nó cho Objective-C nhận được nhiều quyền lực của nó.
Đối tượng chỉ trả lời thư nếu lớp của nó (được trỏ bởi con trỏ isa) thực hiện phương thức được liên kết. Bởi vì điều này xảy ra trong thời gian chạy, XCode không thể luôn luôn tìm ra tại thời gian biên dịch (khi ứng dụng được xây dựng) cho dù một đối tượng sẽ trả lời một tin nhắn.XCode sẽ cung cấp cho bạn một lỗi nếu nó cho rằng bạn đang gửi tin nhắn đến một đối tượng sẽ không trả lời, nhưng nếu nó không chắc chắn, nó sẽ cho phép ứng dụng xây dựng.
Nếu vì lý do nào đó (và có nhiều khả năng), bạn sẽ gửi thư đến một đối tượng không trả lời, ứng dụng của bạn sẽ ném một ngoại lệ. Vì vậy, isa con trỏ là lý do cho lỗi thời gian chạy . Hãy kiểm tra chi tiết và ví dụ tại đây: IOS - Objective-C - Exceptions And Unrecognized Selectors
Nguồn
2016-01-23 18:05:44
đọc nó là "là". "myObj là một ví dụ MyClass" – vikingosegundo
bạn có ví dụ, đó là một con trỏ isa xin vui lòng? – user454083