传值流程:
- 定义一个 block
- 在A实例中,传值给 block
- 在B实例中,实现block,获取到值
.h文件
// 定义 block 的形式
typedef void (^GetNameBlock)(NSString *name);
@interface Son : Father
@property (nonatomic, copy) GetNameBlock aBlock;
- (void)dothing;
- (void)getValue:(GetNameBlock)nameBlock;
@end
.m文件
- (void)dothing
{
// 传值给 block
if (_aBlock) {
_aBlock(@"kim");
}
}
// 把实现的 block 传过来了
- (void)getValue:(GetNameBlock)nameBlock
{
_aBlock = nameBlock;
}
第一种形式:直接实现 block 传值
ViewController 的.m文件
// 实现 block
_son.aBlock = ^(NSString *name) {
NSLog(@"****小孩的名字 %@ ****",name);
};
第二种形式:变相实现 block 传值
_son = [[Son alloc] init];
// 变相实现 block
[_son getValue:^(NSString *name) {
NSLog(@"****小孩的名字 %@ ****",name);
}];
// 事件
[_son dothing];
附件(完整的.h文件 和 .m文件)
完整的.h文件
#import "Father.h"
# pragma mark - 协议
@protocol careChild <NSObject>
- (void)care:(NSString *)name;
@end
// 定义 block 的形式
typedef void (^GetNameBlock)(NSString *name);
@interface Son : Father
@property (nonatomic, weak) id<careChild> delegate;
@property (nonatomic, copy) GetNameBlock aBlock;
- (void)dothing;
- (void)getValue:(GetNameBlock)nameBlock;
@end
完整的.m文件
#import "Son.h"
@implementation Son
- (void)dealloc {
// NSLog(@"%@", @"Son销毁了");
}
- (id)init
{
self = [super init];
if (self) {
// NSLog(@"%@", NSStringFromClass([self class]));
// NSLog(@"%@", NSStringFromClass([super class]));
}
return self;
}
- (void)dothing
{
// 传值给 block
if (_aBlock) {
_aBlock(@"kim");
}
/*
传值给 delegate
[self.delegate care:@"kim"];
*/
}
// 把实现的 block 传过来了
- (void)getValue:(GetNameBlock)nameBlock
{
_aBlock = nameBlock;
}
@end