因此,我對代理人的工作,爲什麼使用它,如何實現等有了一個體面的想法,並且正在努力在我的一個項目中實現它。我試圖解決的問題是從我的網絡訪問類解耦我的控制器對象。在這種情況下,這些想法在我的腦海中變得雜亂無章。委託人在目標中查詢 - C
我以某種方式直觀地感覺到NetworkAccessClass應該是Controller對象的委託,因爲NetworkAccessClass充當Controller對象的幫助器。但似乎在相反的方式工作,因爲以下顯然是做了正確的方式:
NetworkaccessClass.h
@protocol NetworkAccessDelegate
-(void) requestSucceded:(NSData *) data
-(void) requestFailed:(int) responseCode;
@end
@interface NetworkAccessClass : NSObject
{
id<NetworkAccessDelegate> networkDelegate;
}
@property(nonatomic, assign) id networkDelegate;
-(void) initWithDelegate:(id) delegate; //
@end
NetworkAccessClass.m
@implementation
@synthesize networkDelegate
-(void) initWithParams:(id) delegate
{
networkDelegate = delegate;
// Assign GET/POST vals, create request etc
[request startAsynchronous];
}
-(void) requestSucceded:(ASIHTTPRequest *) request
{
if([networkDelegate respondsToSelector:@selector(requestSucceded:)]) {
// Send the data to the controller object for it to use
...
}
}
-(void) requestFailed:(ASIHTTPRequest *) request
{
// Same as above. Send to request failed.
}
@end
我
FirstViewController.h
最後
#import "NetworkAccessClass.h"
@interface FirstViewController<NetworkAccessDelegate>
{
}
-(void) requestSucceded:(NSData *) data;
-(void) requestFailed:(int) responseCode;
@end
和一樣等等。
雖然這從我的網絡類脫鉤我的控制器,我不禁覺得這是錯誤因爲在這種情況下,控制器作爲委託或輔助方法到網絡類,而不是倒過來。我缺少一些基本的東西嗎?或者這是怎麼回事?
謝謝,
Teja。
嗯我得到的理論,但委託,如果你只是把它看作一個英語單詞,只是分配一個任務給某人/事物,有點像助手方法,這會導致混淆。雖然你提供的比喻有幫助。 – 2011-02-24 20:29:02
好吧,就像在這個例子中一樣,讓進程的結果在本地處理到感興趣的地方,這樣核心「做這件事的東西」就不必知道UIView中的哪個位置把數據。委託模式允許完全解耦。這個過程能夠「將」結果的處理「委託」(動詞)到接近那些結果想要使用的對象。 – 2011-02-24 20:42:35