自己对OC中Block的理解2
来源:互联网 发布:揭秘淘宝刷到单流程图 编辑:程序博客网 时间:2024/04/30 15:17
//// ViewController.m// test_stack_block//// Created by jeffasd on 16/5/18.// Copyright © 2016年 jeffasd. All rights reserved.//#import "ViewController.h"typedef void(^TestBlock)(int);@interface ViewController ()//@property(nonatomic, copy) void (^)(int) block;@property (nonatomic, copy)TestBlock testBlock;@property (nonatomic, strong) void (^oneBlock)(int);@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; __block int inta = 2; //weak类型的block不会进行 自动copy操作,但是此weak类型的block没有 //引用任何外部变量 会被立即转换成 NSGlobalBlock __weak void (^ stackBlcok)(int) = ^(int var){ // inta = 3; // NSLog(@"the var is %d", var); // NSLog(@"the block inline is %@", stackBlcok); }; NSLog(@"the block is %@", stackBlcok);// stackBlcok(12); NSLog(@"the block end is %@", stackBlcok); //weak类型的block不会进行 自动copy操作,但是此weak类型的block没有 //引用任何外部变量 会被立即转换成 NSGlobalBlock __weak void (^ weakstackBlcok)(int) = ^(int var){ NSLog(@"the inta is %d", var);//打印var变量不算引用外部变量,var变量是此block自己的变量// NSLog(@"the inta is %d", inta);//引用外部变量inta 变量 由于所有类型的block创建时都是在stack中创建 }; NSLog(@"the weakstackBlcok is %@", weakstackBlcok); // stackBlcok(12); NSLog(@"the weakstackBlcok end is %@", weakstackBlcok); // __weak void (^ weakBlcok)() = ^(){// //// // };// // // NSLog(@"the weakBlcok is %@", weakBlcok);// // stackBlcok(12);// NSLog(@"the weakBlcok end is %@", weakBlcok); __block void (^weakBlock)() = ^(){ NSLog(@"fsdfsdf"); return; }; NSLog(@"the weak block is %@", weakBlock); NSLog(@"test block type %@", ^{}); NSLog(@"test block type %@", ^{}); self.oneBlock = ^(int vara){ NSLog(@"the vara is %d", vara); }; NSLog(@"the block is %@", self.oneBlock); self.oneBlock(56); NSLog(@"the block end is %@", self.oneBlock); }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { int i = 10; void (^block)() = ^{i;}; __weak void (^weakBlock)() = ^{i;}; void (^stackBlock)() = ^{}; __weak void (^weakstackBlock)() = ^{}; // ARC情况下 // 创建时,都会在栈中 // <__NSStackBlock__: 0x7fff5fbff730> NSLog(@"1 %@", ^{i;}); //创建时如果没有引用外部变量,直接转换为__NSGlobalBlock__ NSLog(@"%@", ^{}); // 因为stackBlock为strong类型,且捕获了外部变量,所以赋值时,自动进行了copy // <__NSMallocBlock__: 0x100206920> NSLog(@"3 %@", block); // 如果是weak类型的block,依然不会自动进行copy // <__NSStackBlock__: 0x7fff5fbff728> NSLog(@"4 %@", weakBlock); // 如果block是strong类型,并且没有捕获外部变量,那么就会转换成__NSGlobalBlock__ // <__NSGlobalBlock__: 0x100001110> NSLog(@"5 %@", stackBlock); // 如果block是weak类型,并且没有捕获外部变量,那么也会转换成__NSGlobalBlock__ NSLog(@"6 %@", weakstackBlock); // 在非ARC情况下,产生以下输出 // <__NSStackBlock__: 0x7fff5fbff6d0> // <__NSStackBlock__: 0x7fff5fbff730> // <__NSStackBlock__: 0x7fff5fbff700> // <__NSGlobalBlock__: 0x1000010d0>}@end
0 0
- 自己对OC中Block的理解2
- OC中对Block理解
- oc中block的理解
- 对cuda函数block中thread的理解(2)
- 对iOS中Block的理解
- ios开发中对block 的理解
- 对OC中的闭包(Block)理解
- OC block变量的理解
- 自己对block一些异常浅显的理解
- 个人对于OC中delegate、block的简单理解
- 对OC中NSData使用的理解
- 对OC中NSData使用的理解
- 对block的理解
- 对block的理解
- 对 block 的理解
- OC中Block的使用
- OC中Block的使用
- css中自己对定位的理解。
- 线段树-基础
- USACO Angry Cows总结
- 集训第一周总结
- gdoi2016 愉快地打酱油的一次比赛
- CSDN-markdown语法简介
- 自己对OC中Block的理解2
- StrutsDispatch1.x
- hibernate_detachedCateria_Disjunction(多条件or)
- Football
- LeetCode-11:Container With Most Water
- openstack dev ----1(入门级)
- rhel实现rsh无密码访问
- 268. Missing Number
- 简书地址