有人可以解釋我的委託代碼在iphone sdk工作的具體情況..... ??? 一個簡單的示例如何使用委託和使用委託的優點是什麼。使用代理在iphone sdk
回答
代表是分離消息發送者和接收者的一種方式。消息發佈者不必對#import
所有可能對消息感興趣的類的定義,而是定義一個委託類型,並在該委託上調用一個方法來發送消息。接收器類然後實現委託。
Wikipedia既有的解釋和例子:)
在軟件工程中,委託模式是一種設計模式 在面向對象編程的地方 的對象,而不是執行一個 其既定任務,將該任務委託給關聯的助手對象。 它通過降壓,所以可以說 (技術上,反轉 責任)。助手對象是 ,稱爲委託。代表 模式是其他軟件模式(如 組合(也稱爲 聚合),mixin和方面)的基本抽象模式之一。
Delegate pattern在iPhone SDK中被廣泛使用。考慮下面的例子:
您正在運行一個動畫。底層系統爲您處理動畫。但是,當動畫結束時(例如,當動畫結束時,您想要激活按鈕或顯示一些文本)時,您想要做某些事情是很自然的。現在動畫系統在動畫結束時如何知道該怎麼做?畢竟這是你的自定義任務。因此,您將爲動畫配置一個委託,系統將在動畫結束時調用該委託方法。顯然你會在這個委託方法中完成你的自定義任務。
您有一個文本字段,並且您想知道用戶何時在該字段中點擊或編輯了某些內容。你將如何知道?您將爲您的文本字段配置一個委託,預定義的委託方法將在該特定字段被編輯或點擊時由UITextField類調用。
忘記UIApllicationDelegate?該系統負責加載和運行應用程序。它如何告訴你它的初始化已經完成,你現在可以運行你的代碼?它會調用你的應用程序委託的applicationDidFinishLaunching方法。
您正在發出異步http請求。加載數據後,您的委託方法將被調用,以便您現在可以處理數據。
還有更多的例子。爲了使用委託,您將需要指定委託對象,有時候還需要指定選擇器。究竟需要做什麼取決於你在做什麼。也就是說,配置動畫委託與配置文本字段委託不同。但是一般的過程是一樣的,那就是你需要指定你的委託對象。動畫
示例代碼:
CATransition *animation = [CATransition animation]; [animation setDelegate:delegate]; // here delegate is your delegate object
動畫結束後,您的委託對象的
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag將被調用,你會做你定製這個方法。
基本定義: 委託是行爲代表的,或與另一對象的協調時該對象遇到在一個程序中的事件的對象。 more details
情形(在消息傳遞中使用): 假設對象A呼叫對象B執行動作。一旦行動完成,對象A應該知道B已經完成了任務並採取了必要的行動。這是代表團的工作原理。
藉助協議,我們可以在iOS中實現委派。這裏是 代碼:
ViewControllerA.h
#import <UIKit/UIKit.h>
@interface ViewControllerA : UIViewController
{
}
@end
ViewControllerA.m
#import "ViewControllerA.h"
#import "ViewControllerB.h"
@interface ViewControllerA()<SimpleProtocol>
@end
@implementation ViewControllerA
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self performSelector:@selector(delegatingWorkToControllerB)withObject:nil afterDelay:3.0];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)delegatingWorkToControllerB{
ViewControllerB *vcB = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewControllerB"];
vcB.delegate = self;
[self presentViewController:vcB animated:YES completion:^{
}];
}
#pragma mark - SimpleProtocol Delegate Method
-(void)updateStatus:(NSString*)status {
NSLog(@"%@",status);
}
@end
ViewControllerB.h
#import <UIKit/UIKit.h>
@protocol SimpleProtocol<NSObject>
-(void)updateStatus:(NSString*)status;
@end
@interface ViewControllerB : UIViewController
{
}
@property(nonatomic, unsafe_unretained)id<SimpleProtocol>delegate;
@end
ViewControllerB.m
#import "ViewControllerB.h"
@interface ViewControllerB()
@end
@implementation ViewControllerB
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
[self performSelector:@selector(informingControllerAAfterCompletingWork) withObject:nil afterDelay:3.0];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
}
-(void)informingControllerAAfterCompletingWork{
//you can perform some task here and after completion of the task you can call this to notify the previous controller
[self.delegate updateStatus:@"controller B work has done.. update successfull :)"];
//dismissing the view controller
[self dismissViewControllerAnimated:YES completion:^{
}];
}
@end
工作示例:code
- 1. 使用iphone sdk
- 2. 在iPhone SDK上使用setApplicationBadgeString
- 3. 在iPhone SDK中使用XMPP?
- 4. 在iPhone中使用塊設置代理
- 5. 處理通話的IPhone SDK
- 6. 在iphone sdk中管理使用xmpp的朋友?
- 7. 我想在我的iPhone SDK代碼中使用PI
- 8. 開放源代碼日曆iphone iphone sdk
- 9. base64 http post使用iphone sdk
- 10. 多NSURLCoonections使用iPhone SDK的
- 11. 使用iPhone sdk編輯PDF
- 12. 使用JSON從iPhone SDK HTTP_POST
- 13. 如何使用iPhone SDK
- 14. iPhone SDK,處理API調用的框架?
- 15. 在iphone SDK中處理PDF內容?
- 16. 在iphone中的撤消管理器sdk
- 17. iPhone SDK:在處理之前驗證XML?
- 18. 舊的iPhone SDK代碼不起作用?
- 19. 如何在IB [iPhone SDK]中使用NSLocalizedString?
- 20. 如何在iPhone SDK中使用LinkedIn API?
- 21. 如何在iPhone SDK中使用libtar?
- 22. 在iPhone/iPad上使用BING地圖sdk
- 23. 如何在Iphone Sdk中使用NSInputStream
- 24. 如何在Xcode5中使用iPhone sdk 6.1?
- 25. 在iPhone SDK中使用視頻打開
- 26. 在iPhone SDK的
- 27. 在iPhone SDK
- 28. 在iPhone SDK的
- 29. 在iPhone SDK 3.0
- 30. 在iPhone SDK