Hello Block

作者: 挚爱因念成伤 | 来源:发表于2016-08-19 17:22 被阅读228次

//1 block 语法

// Block变量的赋值格式为: Block变量 = ^(参数列表){函数体};

//2.1 无参数 无返回值

void (^WuCanShuWuFanHuiZhi)() = ^{

NSLog(@"心落入情牢,爱嗜血燃烧");

};

//调用

WuCanShuWuFanHuiZhi();

//2.2 无参数 有返回值

NSString * (^WuCanShuYouFanHuiZhi)() = ^{

NSString * a = @"荣耀在你面前付之一笑";

return a;

};

//调用

NSString * a = WuCanShuYouFanHuiZhi();

NSLog(@"%@ 痛无论多少,泪一滴就好", a);

//2.3 有参数  无返回值

void (^YouCanShuWuFanHuiZhi)() = ^(NSString *name){

NSLog(@"%@ 若是快刀 我奉献怀抱 !",name);

};

YouCanShuWuFanHuiZhi(@"痴情");

//2.4 有参数  有返回值

NSString * (^YouCanShuYouFanHuiZhi)(NSString *, NSString *) = ^(NSString * string_1,NSString * string_2){

return [string_1 stringByAppendingString:string_2];

};

NSString * b = YouCanShuYouFanHuiZhi(@"仰天长啸",@"我心寂寥");

NSLog(@"%@ 英雄泪只用来怜芳草 ",b);

//3 改变block中局部变量的值

//在这个地方不要想 __weak

__block NSString *sentence = @"仰天长啸";//不加__block会报错(一句话:不能指向a对应的地址)(扯淡的话:  在block的生成结构体实例的时候,__block也会生成一个结构体实例,并且在该结构体中有一个__forwording的指针指向截取的变量的内存地址,而block的__main_block_impl_0结构体实例持有指向__block变量的__Block_byref_val_0结构体实例的指针,所以block可以拥有指向截取变量内存地址的指针)

void (^JiuWeiLeShiShiXiBu)() = ^{

sentence = @"我心寂寥";

NSLog(@"%@ 雨一时风一时暮与朝",sentence);

};

JiuWeiLeShiShiXiBu();

//4 Block 链式反应 用OC一样写出Swift代码

ZSC_hello_block *is_instance = [[ZSC_hello_block alloc] init];

is_instance.say_hello_to(@"is only a test").da_bu_guo_pao_a().jiu_da_ni_za_di();

/**

*  @author 很傻很天真, 16-08-19 15:08:08

*

*  block下个界面回调传值

*

*  @param sender button

*  @param event  event

*

*  @since ZSC

*/

- (IBAction)for_next:(UIButton *)sender forEvent:(UIEvent *)event {

// 4 解决循环引用

__weak typeof (self) wearSelf = self;

//4.1 使用了__weak,如果在代码中不将控制器弱引用block的话就会发生循环引用而无法释放的问题。(A控制器拥有block,而且block拥有A)。

//4.2 还可以使用__block(self拥有block,block拥有__block,__block拥有self) But必须要执行一次block才行 底层指正决定的

ZSC_SecondVC *vc = [[ZSC_SecondVC alloc] init];

vc.DearBlock = ^(NSString *name){

wearSelf.all_get_is = name;

NSLog(@"%@ 我与你约定在劫难逃! 恩怨易了 柔情难抛 恍然中 当时年少",wearSelf.all_get_is);

};

[self.navigationController pushViewController:vc  animated:YES];

}

////  ZSC_SecondVC.h

//  DearBlock

//

//  Created by nd_zsc on 16/8/19.

//  Copyright © 2016年 很傻很天真. All rights reserved.

//

#importtypedef void (^Is_A_Block) (NSString *name);

@interface ZSC_SecondVC : UIViewController

/**

*  @author 很傻很天真, 16-08-19 13:08:44

*

*  第一种方式:生成block类型的属性

*

*  @since ZSC

*/

@property (nonatomic , copy) void(^DearBlock)(NSString *name);

/**

*  @author 很傻很天真, 16-08-19 13:08:29

*

*  第二种方式:生成block属性

*

*  @since ZSC

*/

@property (nonatomic, copy) Is_A_Block dear_block;

@end

//

//  ZSC_SecondVC.m

//  DearBlock

//

//  Created by nd_zsc on 16/8/19.

//  Copyright © 2016年 很傻很天真. All rights reserved.

//

#import "ZSC_SecondVC.h"

@implementation ZSC_SecondVC

- (void)viewDidLoad{

self.view.backgroundColor = [UIColor orangeColor];

if (self.DearBlock) {

self.DearBlock(@"恩怨易了 柔情难抛");

}

}

@end

////  ZSC_hello_block.h

//  DearBlock////  Created by nd_zsc on 16/8/19.

//  Copyright © 2016年 很傻很天真. All rights reserved.

//      

 #import@interface ZSC_hello_block : NSObject

- (ZSC_hello_block *(^)())say_hello_to;

- (ZSC_hello_block *(^)())da_bu_guo_pao_a;

- (ZSC_hello_block *(^)())jiu_da_ni_za_di;

@end

//

//  ZSC_hello_block.m

//  DearBlock

//

//  Created by nd_zsc on 16/8/19.

//  Copyright © 2016年 很傻很天真. All rights reserved.

//

#import "ZSC_hello_block.h"

@implementation ZSC_hello_block

/**

*  @author 很傻很天真, 16-08-19 17:08:20

*

*  return  ^ZSC_hello_block *(NSString *name){

NSLog(@"say hello to %@",name);

return self;

};

*

*  @param name <#name description#>

*

*  @since <#version number#>

*/

- (ZSC_hello_block *(^)())say_hello_to{

return  ^ZSC_hello_block *(NSString *name){

NSLog(@"say hello to %@",name);

return self;

};

}

- (ZSC_hello_block *(^)())da_bu_guo_pao_a{

return ^(){

NSLog(@"干掉多余的你才是最强的");

return self;

};

}

- (ZSC_hello_block *(^)())jiu_da_ni_za_di{

return ^(){

NSLog(@"当你不能站在绝对的位置时,绝不公平行事,让强者更强,让弱者更弱!");

return self;

};

}

@end

对应的Demo地址:https://github.com/897153662/block.git

相关文章

网友评论

    本文标题:Hello Block

    本文链接:https://www.haomeiwen.com/subject/cbvbsttx.html