block4-__block原理

__Block 原理

先来测试一个经典的案例:

1
2
3
4
5
6
7
8
int age = 10;
void (^block)(void) = ^{
NSLog(@"--- age = %d", age);
};
age = 20;
block();

/// 输出结果 --- age = 10

阅读全文

block3-类型、copy原理

block 类型

block 的类型有3中,可以通过调用 class 方法或者 isa 指针查看具体类型,最终都是集成子 NSBlock 类型

  1. 数据区:NSGlobalBlock ( _NSConcreteGlobalBlock )
  2. 栈区:NSStackBlock ( _NSConcreteStackBlock )
  3. 堆区:NSMallocBlock ( _NSConcreteMallocBlock )

block 类型的具体类型区分:

block 类型 环境
__NSGlobalBlock__ 没有访问 auto 变量
__NSStackBlock__ 访问了 auto 变量
__NSMallocBlock__ __NSStackBlock__ 调用了 copy

阅读全文

block2-变量的捕获

变量的捕获

为了保证 block 内部能够正常访问外部变量,block 有个变量捕获机制:

变量类型 捕获到 block 内部 访问方式
局部变量 - auto 值传递
局部变量 - static 指针传递
全局变量 x 直接访问

阅读全文

block原理探究


最近在做业务时,可谓一步一个坑,所以回过头来补充下最基础的原理知识。
PS:基础好才是真的好!!!

阅读全文

2018总结-2019计划

2018总结

不平凡的2018,很无奈的换了四份工作,最近也在想原因,总结如下:

  • 技术不够硬
  • 处世不够圆滑

阅读全文

block原理然就-3

测试

block 底层数据结构

测试代码:

1
2
3
4
5
6
7
8
9
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^block)(void) = ^{
NSLog(@"block1234");
};
block();
}
return 0;
}

阅读全文

block原理探究-2

block的类型

先来看一下测试:

1
2
3
4
5
6
7
8
void (^block1)(void) = ^{
NSLog(@"block1--- %d %d %d", age, height, weight);
};

NSLog(@"%@ %@ %@ %@", [block1 class], [[block1 class] superclass], [[[block1 class] superclass] superclass], [[[[block1 class] superclass] superclass] superclass]);

打印结果:
__NSMallocBlock__ __NSMallocBlock NSBlock NSObject

阅读全文

block原理探究-1

block 底层数据结构

测试代码:

1
2
3
4
5
6
7
8
9
int main(int argc, const char * argv[]) {
@autoreleasepool {
void (^block)(void) = ^{
NSLog(@"block1234");
};
block();
}
return 0;
}

阅读全文

category原理探究-3

关联对象的使用

阅读全文

category原理探究-2

+load 方法解析

阅读全文