Mục lục:
- Làm thế nào để có được lớp của một đối tượng
- Khi bạn có một handle cho một đối tượng lớp, bạn có thể kiểm tra nó trong thời gian chạy bằng các chức năng introspection được cung cấp trong Objective-C.Ví dụ, bạn có thể kiểm tra đối tượng này để xem nó là loại gì. Bạn có thể kiểm tra nó để xem nếu nó có một phương pháp nhất định hoặc một thuộc tính nhất định, vân vân.
Video: Hướng dẫn làm Video quảng cáo CHUYÊN NGHIỆP và DỄ THỰC HIỆN 2025
Introspection đề cập đến các tiện nghi trong ứng dụng iOS ' ngôn ngữ lập trình để kiểm tra cấu trúc và các chi tiết khác của một đối tượng và lớp của nó khi chạy. Thông tin chi tiết có thể bao gồm:
-
Cây kế thừa của đối tượng
-
Cho dù nó phù hợp với một giao thức cụ thể
-
Cho dù nó có đáp ứng với một thông điệp nhất định
Khi bạn biết một đối tượng được tạo thành, bạn có thể lập trình để gửi đến nó, làm cho chương trình của bạn năng động hơn nhiều.
Làm thế nào để có được lớp của một đối tượng
Bạn có thể nhận được các lớp học của một đối tượng trong thời gian chạy. Trong thực tế, Objective-C xử lý các lớp như các đối tượng hạng nhất. Mỗi đối tượng lớp trỏ tới một cấu trúc dữ liệu trong bộ nhớ, có một siêu lớp (được gọi là metaclass) và có thể phản hồi lại các thông báo gọi phương thức.
Khi bạn gọi một phương thức lớp, bạn thực sự gửi một thông điệp đến đối tượng của lớp.
StackOfInteger * aStack = [[StackOfInteger alloc] init]; NSLog (@ "Lớp là% @, và siêu là% @.", [AStack class], [aStack superclass]);Cách tự động gọi các phương thức
Lớp postfixCalculatorClass = [someObject class]; [postfixCalculatorClass performSelector: @selector (printClassDescription)];
Có hai mục cần được giải thích ở đây. Đầu tiên, bộ chọn @ là một
biên dịch - chỉ thị thời gian và trả về một con trỏ tới phương thức printClass. Thứ hai, bạn có thể sử dụng performSelector để thực sự gọi phương thức đó. Trong ví dụ trước, tên phương thức đã được dịch sang một con trỏ tới phương thức tại thời gian biên dịch. Bạn cũng có thể gọi một phương thức instance trên một đối tượng bằng cách sử dụng tên của một phương thức, trong thời gian chạy như sau:
SEL printClassDescriptionSEL = NSSelectorFromString (@ "printClassDescription"); [postfixCalculatorClass performSelector: printClassDescriptionSEL];
Trong ví dụ này, bạn có thể sử dụng kiểu SEL (còn được gọi là bộ chọn trong thuật ngữ Mục tiêu-C, và do đó SEL) giữ biểu diễn nội bộ của một phương thức.
Làm thế nào để kiểm tra đặc tả của một đối tượng
Khi bạn có một handle cho một đối tượng lớp, bạn có thể kiểm tra nó trong thời gian chạy bằng các chức năng introspection được cung cấp trong Objective-C.Ví dụ, bạn có thể kiểm tra đối tượng này để xem nó là loại gì. Bạn có thể kiểm tra nó để xem nếu nó có một phương pháp nhất định hoặc một thuộc tính nhất định, vân vân.
Bảng dưới đây cho thấy tất cả các phương pháp để kiểm tra cấu trúc và khả năng của một đối tượng lớp và để thực hiện các hành động trên nó.
Phương pháp
Câu hỏi hoặc Hành động | - (BOOL) isKindOf: class-object |
---|---|
Đối tượng là một thành viên hoặc hậu duệ của một lớp? | - (BOOL) isMemberOf: class-object |
Đối tượng là thành viên của lớp không? | - (BOOL) respondsTo: selector |
Đối tượng có thể phản ứng với một phương pháp không? | + (BOOL) instanceRespondTo: selector |
Các trường hợp của lớp có thể phản ứng với một tin nhắn không? | - (id) thực hiện: selector |
Áp dụng phương pháp được chỉ định bởi selector. | + (BOOL) conformsToProtocol: (Protocol *) |
aProtocol CÓ nếu người nhận tuân theo giao thức aProtocol; nếu không, KHÔNG. | Để biết thêm chi tiết về việc xem xét nội bộ và cách sử dụng nó, hãy tham khảo Tài liệu tham khảo Thời gian chạy của Apple iOS và Hướng dẫn Lập trình Thời gian chạy của Cổng phát triển Apple Developer C. |
