1.block属于oc对象,有三种不同的类型,分别对应三种不同的内存区域(堆区,栈区,全局区),特性:自动捕获变量。
2.strong,copy,weak修饰block时:
2.1.没有外部变量:block属于全局区,globalBlock
2.2.有外部变量:
2.2.1.有全局变量,全局静态变量,局部静态变量:block依然在全局区,globalBlock
2.2.2.局部变量(普通外部变量):copy,strong修饰的block在堆区,mallocBlock。weak修饰的block在栈区,stackBlock
本质:有普通外部变量的block,它创建后在栈区,只是copy,strong修饰的block,会把它从栈区移到堆区;而weak不会
3.把Objc代码转为C++代码的命令
1.展示skds
xcodebuild -showsdks
2.转换C++代码命令:
xcrun -sdk iphonesimulator12.1 clang -S -rewrite-objc -fobjc-arc -fobjc-runtime=ios-12.1 文件名称
C++转换1.png
C++转换2.png
C++转换3.png
解决循环引用的三种方法:
1.__weak
2.__block,block内 object=nil;
3.block参数,传入self