这段时间看了黑马的视频,发现之前一些不懂得东西,现在突然就明白了,还是做项目能提升自己啊
#import <UIKit/UIKit.h>
@class DelegateDetailViewController;
//第一步,确定谁是数据的提供方,然后写协议
@protocol DelegateDetailViewControllerDelegate <NSObject>
@optional
//有参数
- (void)detailViewController:(DelegateDetailViewController *)ViewController passValue:(NSString *)aString;
//无参数
- (void)detailViewController:(DelegateDetailViewController *)ViewController;
@end
@interface DelegateDetailViewController : UIViewController
//第二步,声明Delegate,注意weak
// 代理如果使用强引用,就会产生循环引用,造成控制器和子视图都无法被释放,造成内存泄露
@property (nonatomic, weak) id<DelegateDetailViewControllerDelegate> delegate;
@end
#import "DelegateDetailViewController.h"
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.navigationItem.title = @"代理";
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
//第三步:确定合适的实际调用代理方法
if ([self.delegate respondsToSelector:@selector(detailViewController:)]) {
[self.delegate detailViewController:self];
}
if ([self.delegate respondsToSelector:@selector(detailViewController:passValue:)]) {
[self.delegate detailViewController:self passValue:@"需要传得参数"];
}
}
#import "DelegateViewController.h"
#import "DelegateDetailViewController.h"
//第五步:遵循代理协议
@interface DelegateViewController ()<DelegateDetailViewControllerDelegate>
@property (strong, nonatomic) IBOutlet UILabel *aLabel;
- (IBAction)pressButton:(id)sender;
@end
@implementation DelegateViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
self.navigationItem.title = @"代理";
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)pressButton:(id)sender
{
DelegateDetailViewController *detailVC = [[DelegateDetailViewController alloc] init];
//第四步:设置代理
detailVC.delegate = self;
[self.navigationController pushViewController:detailVC animated:YES];
}
//第六步:实现代理方法
#pragma mark - DelegateDetailViewControllerDelegate
- (void)detailViewController:(DelegateDetailViewController *)ViewController
{
//第七步,执行自己需求的方法
NSLog(@"需要执行的操作");
}
- (void)detailViewController:(DelegateDetailViewController *)ViewController passValue:(NSString *)aString
{
//第七步,执行自己需求的方法
NSLog(@"%@", aString);
self.aLabel.text = aString;
}
iOS开发代理协议的使用
最新推荐文章于 2021-06-28 23:54:08 发布