2010-12-11 28 views
15

Giá trị của _cmd biến khi tôi truy cập vào giá trị đó từ cơ thể của hàm kiểu C?_cmd bên trong các hàm c

Được xác định bên trong các phương thức chỉ chọn (Mục tiêu-C)?

P.S.

Câu hỏi này có thể bắt nguồn từ sự hiểu biết của tôi về những gì _cmd là. Tôi sẽ đánh giá cao nếu ai đó cung cấp cho tôi một nguồn giải thích tốt.

Trả lời

17

Chỉ dành cho các phương pháp Mục tiêu-C, vì vậy bạn không thể truy cập nó. Hai tham số đầu tiên được truyền cho tất cả các phương thức Objective-C là self_cmd, sau đó bất kỳ đối số nào khác mà phương thức thực tế thực hiện. Vì không phải self cũng không phải _cmd được chuyển tới các hàm C thông thường, bạn không thể truy cập chúng.

Không có gì đặc biệt kỳ diệu về một trong hai biến.

+3

Để tham khảo: [Objective-C phương pháp] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ObjCRuntimeRef/ Tham khảo/tham khảo.html). Lưu ý rằng bất kỳ hàm C nào có một 'id' và' SEL' là hai đối số đầu tiên của nó có thể được sử dụng như là một phương thức thực hiện. Tương tự như vậy, bất kỳ phương thức thực thi nào cũng là một hàm C nhận một 'id' và' SEL' làm hai đối số đầu tiên của nó. – outis

+7

Để rõ ràng hơn, '_cmd' là' SEL' - bộ chọn phương thức cho phương pháp Objective-C. "Bộ chọn phương thức là một chuỗi C đã được đăng ký (hoặc 'ánh xạ') với thời gian chạy Objective-C." –

18

Việc sử dụng chính chức năng _cmd là lấy tên phương thức mà nó được gọi.

Việc sử dụng hàm _cmd với một số chức năng khác đã được viết bên dưới.

NSLog(@"<%@:%@:%d>", NSStringFromClass([self class]), NSStringFromSelector(_cmd), __LINE__); 

Thay vì dòng ở trên, bạn cũng có thể sử dụng PrettyFunction

NSLog(@"%s", __PRETTY_FUNCTION__); 
0

Xin hãy here cho lời giải thích thêm.

func class_addMethod(_ cls: AnyClass!, 
        _ name: Selector!, 
        _ imp: IMP!, 
        _ types: UnsafePointer<Int8>!) -> Bool 

imp:

A function which is the implementation of the new method. The function must take at least two arguments—self and _cmd. 
Các vấn đề liên quan