Mục tiêu-C sử dụng hệ thống truyền thông phức tạp khi một đối tượng gọi một phương thức trên đối tượng khác. Tôi muốn biết nếu nó có thể, trong phương pháp được gọi, để xác định những gì các đối tượng gọi là?Có thể sử dụng các tính năng thời gian chạy Objective-C để xác định một phương thức được gọi từ đâu không?
Ví dụ:
@implementation callingClass
- (void)performTest
{
calledObject = [[[calledClass alloc] init] autorelease];
id result = [calledObject calledMethod];
assert(result == this);
}
@end
@implementation calledClass
- (id)calledMethod
{
id objectThatCalledThisMethod = ... // <-- what goes here?
return objectThatCalledThisMethod;
}
@end
Những gì tôi có thể viết trong dòng nhận xét để làm cho đèo khẳng định khi tôi thực hiện performTest
?
NSInvocation cũng không có bất cứ điều gì về người gọi - chỉ cần mục tiêu, chọn, và tranh luận. –
Đó là lý do tại sao tôi đề xuất phát sinh một lớp mới hoặc gói nó xung quanh, điều này ít nhất có thể cung cấp cho bạn một cách nhất quán để chuyển người gửi vào hàm gọi hoặc có thể xây dựng cấu trúc dữ liệu nơi thông tin có thể được lấy từ đầu người nhận. Nó phụ thuộc vào những gì anh ta đang cố gắng hoàn thành –