Thực ra, một phương pháp Objective-C chỉ là một hàm C với hai đối số luôn có mặt ở đầu.
này:
-(void)aMethod;
là chính xác tương đương như sau:
void function(id self, SEL _cmd);
Objective-C nhắn của là như vậy mà này:
[someObject aMethod];
là chính xác tương đương với này (hầu như - - có một vấn đề đối số ABI variadic nằm ngoài phạm vi của câu trả lời này):
objc_msgSend(someObject, @selector(aMethod));
objc_msgSend() tìm thấy việc thực hiện phù hợp của phương pháp này (bằng cách nhìn nó lên trên someObject
) và sau đó, thông qua sự kỳ diệu của một tối ưu hóa cuộc gọi đuôi, nhảy đến việc thực hiện các phương pháp đó, đối với tất cả ý nghĩa và mục đích , hoạt động chính xác như cuộc gọi hàm C trông giống như sau:
function(someObject, @selector(aMethod));
Trước đây, mục tiêu-C ban đầu không được thực hiện, nhưng là bộ tiền xử lý C. Mọi thứ bạn có thể thực hiện trong Mục tiêu-C có thể được viết lại dưới dạng C. thẳng
Làm như vậy, tuy nhiên, sẽ là một nỗi đau hoàn toàn trong ass và không đáng để bạn vượt qua trải nghiệm giáo dục cực kỳ quan trọng.
Nói chung, bạn sử dụng phương pháp Objective-C khi nói chuyện với các đối tượng và chức năng khi làm việc với thẳng C goop. Cho rằng khá nhiều tất cả các hệ điều hành Mac OS X và iOS cung cấp các API mục tiêu-C - chắc chắn hoàn toàn như vậy đối với các điểm nhập chương trình cấp UI - sau đó bạn sử dụng hầu hết thời gian của Obj-C. Ngay cả khi viết mã mức mô hình của riêng bạn tương đối độc lập, bạn thường sẽ sử dụng Objective-C đơn giản bởi vì nó cung cấp một keo rất tự nhiên giữa trạng thái/dữ liệu & chức năng, một đối tượng thuê cơ bản của lập trình hướng đối tượng.
Rất ngắn gọn và hữu ích. Tôi nhớ rằng C++ gốc cũng chỉ là một bộ tiền xử lý. – AlanObject