2010-01-15 35 views
8

Tôi đang gặp sự cố khi hiểu khái niệm về các cửa hàng cách iPhone xử lý sự kiện. Cứu giúp! Các đại biểu cũng nhầm lẫn tôi. Ai đó có thể giải thích, xin vui lòng?Thuật ngữ C mục tiêu: đại lý & đại biểu

+2

không cố gắng trở thành kẻ giật giật nhưng bạn đã đọc tài liệu giới thiệu tại developer.apple.com chưa? Nó chỉ là câu hỏi sẽ có một bài luận để trả lời. Có thể hỏi một câu hỏi chi tiết hơn về những gì đang treo bạn lên. –

+0

Tài liệu mà Apple cung cấp trong Hướng dẫn cơ bản về ca cao trên các cửa hàng: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/ TP40002974-CH7-SW3 và các đại biểu: http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CommunicatingWithObjects/CommunicateWithObjects.html#//apple_ref/doc/uid/TP40002974-CH7-SW18 dường như khá kỹ lưỡng với tôi. –

+0

@Brad - Tôi không phải là người tài liệu. – Moshe

Trả lời

19

Cửa hàng (trong Trình tạo giao diện) là các biến thành viên trong một lớp nơi các đối tượng trong trình thiết kế được chỉ định khi chúng được tải khi chạy. Các IBOutlet vĩ mô (mà là một trống rỗng #define) tín hiệu Interface Builder để nhận ra nó như là một lối thoát để hiển thị trong thiết kế. Ví dụ, nếu tôi kéo ra một nút, sau đó kết nối nó với ổ cắm aButton (được định nghĩa trong tệp .h giao diện của tôi), việc tải tệp NIB vào thời gian chạy sẽ chỉ định aButton con trỏ đến số UIButton được khởi tạo bởi NIB.

@interface MyViewController : UIViewController { 
    UIButton *aButton; 
} 

@property(nonatomic, retain) IBOutlet UIButton *aButton; 

@end 

Sau đó, trong việc thực hiện:

@implementation MyViewController 

@synthesize aButton; // Generate -aButton and -setAButton: messages 

-(void)viewDidAppear { 
    [aButton setText:@"Do Not Push. No, seriously!"]; 
} 

@end 

này giúp loại bỏ sự cần thiết phải viết mã để nhanh chóng và gán các đối tượng GUI khi chạy.


Đối với đại biểu, họ là sự kiện tiếp nhận đối tượng được sử dụng bởi một đối tượng (thường là một lớp API tổng quát như một cái nhìn bảng). Chẳng có gì đặc biệt về họ cả. Đó là một mô hình thiết kế. Lớp đại biểu có thể xác định một số thông báo dự kiến ​​như:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

... và đối tượng API gọi thông báo này trên đại biểu khi họ muốn thông báo cho sự kiện. Ví dụ:

-(void)update:(double)time { 
    if (completed) { 
     [delegate process:self didComplete:totalTimeTaken]; 
    } 
} 

Và các đại biểu xác định thông điệp:

-(void)process:(Process *)process didComplete:(double)totalTimeTaken { 
    NSString *log = [NSString stringWithFormat:@"Process completed in %2.2f seconds.", totalTimeTaken]; 
    NSLog(log); 
} 

sử dụng như vậy có thể là:

Process *proc = [Process new]; 
[proc setDelegate:taskLogger]; 
[proc performTask:someTask]; 

// Output: 
// "Process completed in 21.23 seconds." 
+0

Vì vậy, các đại biểu thực sự được tôn vinh các phiên bản của những ngôn ngữ khác như Javascript hoặc Python hiểu là gọi lại, đúng không? – SexyBeast

9

Một đại biểu chỉ là một đối tượng mà đối tượng khác có thể chuyển tiếp các tin nhắn đến. Nói cách khác, nó giống như khi mẹ bạn nói với bạn để làm sạch phòng của bạn và bạn pawned nó ra trên em trai của bạn. Bro nhỏ của bạn biết cách làm công việc (vì bạn quá lười biếng để học hỏi) và vì vậy anh ấy làm điều đó cho bạn.

+1

Thật là một sự so sánh giáo lý tuyệt vời! –

+1

Tại sao mẹ không hỏi em trai trực tiếp? – super9

Các vấn đề liên quan