傳值流程:
- 定義一個(gè) block
- 在A實(shí)例中,傳值給 block
- 在B實(shí)例中,實(shí)現(xiàn)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");
}
}
// 把實(shí)現(xiàn)的 block 傳過(guò)來(lái)了
- (void)getValue:(GetNameBlock)nameBlock
{
_aBlock = nameBlock;
}
第一種形式:直接實(shí)現(xiàn) block 傳值
ViewController 的.m文件
// 實(shí)現(xiàn) block
_son.aBlock = ^(NSString *name) {
NSLog(@"****小孩的名字 %@ ****",name);
};
第二種形式:變相實(shí)現(xiàn) block 傳值
_son = [[Son alloc] init];
// 變相實(shí)現(xiàn) block
[_son getValue:^(NSString *name) {
NSLog(@"****小孩的名字 %@ ****",name);
}];
// 事件
[_son dothing];
附件(完整的.h文件 和 .m文件)
完整的.h文件
#import "Father.h"
# pragma mark - 協(xié)議
@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"];
*/
}
// 把實(shí)現(xiàn)的 block 傳過(guò)來(lái)了
- (void)getValue:(GetNameBlock)nameBlock
{
_aBlock = nameBlock;
}
@end