主线程与子线程经常需要进行数据的传递,不同的类之间,不同的控制器之间都需要。
而且经常需要监听一个动作的完成,而后才去做相应事件。(代理是一对一的关系)。
一、代理传值
代理是一种设计模式。iOS中用的非常多。可以通过自定义代理来进行传值。
参见我的这篇文章 http://blog.csdn.net/xn4545945/article/details/31036523
在iOS中,委托方与被委托方都要实现3个步骤。(见代码注释)
下面代码:模拟下载完成后需要更新UI. 用代理来传值.
XNUpload.h
- #import <Foundation/Foundation.h>
-
-
- @protocol XNUploadDelegate <NSObject>
- - (void)downloadFinshed:(NSString *)param;
- @end
-
-
- @interface XNUpload : NSObject
-
- @property (nonatomic, assign) id <XNUploadDelegate> delegate;
-
- -(void)download;
- @end
XNUpload.m
- #import "XNUpload.h"
-
- @implementation XNUpload
-
-
-
- - (void)download {
- NSLog(@"正在下载....");
- sleep(3.0);
- NSLog(@"下载完成!");
-
- [self.delegate downloadFinshed:@"下载完成啦!"];
- }
-
- @end
XNViewController.m
- #import "XNViewController.h"
- #import "XNUpload.h"
-
- @interface XNViewController () <XNUploadDelegate>
-
- @end
-
- @implementation XNViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- XNUpload *upload = [[XNUpload alloc] init];
- [upload download];
-
-
- upload.delegate = self;
- }
-
-
- - (void)downloadFinshed:(NSString *)param {
- NSLog(@"%@", param);
- }
-
- @end