Block详解

2017-11-17  本文已影响10人  leonardni

block


一、前期准备知识

1.1 堆与栈基本概念
1.2 终端与clang编译常用命令

1.1 堆与栈简介:

  1. 栈区(stack)- 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  2. 堆区(heap)- 般由程序员分配释放,若程序员不释放,程序结束时可能由OS(即操作系统)回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

例子:

//main.cpp    
  int   a   =   0;   全局初始化区    
  char   *p1;   全局未初始化区    
  main()    
  {    
  int   b;   栈    
  char   s[]   =   "abc";   栈    
  char   *p2;   栈    
  char   *p3   =   "123456";   123456/0在常量区,p3在栈上。    
  static   int   c   =0;   全局(静态)初始化区    
  p1   =   (char   *)malloc(10);    
  p2   =   (char   *)malloc(20);    
  分配得来得10和20字节的区域就在堆区。    
  strcpy(p1,   "123456");   123456/0放在常量区,编译器可能会将它与p3所指向的"123456"  
  优化成一个地方。    
  }    

除此之外还有全局区、文字常量区、程序代码区。具体见这篇文章堆和栈的区别(转过无数次的文章)
这里就不扩展开了。

1.2 终端与clang编译常用命令

1.2.1 终端打开方式:

 `LaunchPad -> 其他 -> 终端`
WX20171117-160257@2x.png

1.2.2 clang编译常用命令

(1) Clang重写m文件为cpp文件

image.png
cd 到工程目录然后输入clang -rewrite-objc xxxx.m
然后你目录下就会从写一个cpp文件,内容比较多你可以搜索关键方法对照查看。
详细的clang编译介绍可以看下这篇文章深入剖析 iOS 编译 Clang / LLVM

注意事项

block 官方介绍


QQ20171118-152029@2x.png
QQ20171118-152918@2x.png

Block在MRC及ARC下的内存管理

iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析)

处理方法:


image.png

参考文献:
Blocks Programming Topics
A Short Practical Guide to Blocks

上一篇下一篇

猜你喜欢

热点阅读