美文网首页
Block详解

Block详解

作者: leonardni | 来源:发表于2017-11-17 16:17 被阅读10次

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对象的初始化,引用,释放的分析)

  • 在Block的内存存储在栈中时,如果在Block中引用了外面的对象,不会对所引用的对象进行任何操作
  • 如果对Block进行一次copy操作,那么Block的内存会被移动到堆中,这时需要开发人员对其进行release操作来管理内存
  • 如果对Block进行一次copy操作,那么Block的内存会被移动到堆中,在Block的内存存储在堆中时,如果在Block中引用了外面的对象,会对所引用的对象进行一次retain操作,即使在Block自身调用了release操作之后,Block也不会对所引用的对象进行一次release操作,这时会造成内存泄漏。

处理方法:


image.png
  • 如果对象内部有一个Block属性,而在Block内部又访问了该对象,那么会造成循环引用,解决循环引用的办法是在对象的前面使用下划线下划线block来修饰,以避免Block对对象进行retain操作

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

相关文章

  • iOS Block实例

    iOS之Block详解:Block详解 ViewController.h(ARC) ViewController....

  • Block - block简单的使用

    参考文档 iOS Block详解 一、忘记block格式? 样例一.png 样例二.png 二、Block的定义 ...

  • SDWebImage4.0源码探究(二)具体代码拓展

    代码一 知识点:block参考:iOS中block的详解weakSelf、strongSelf <转自唐巧>Blo...

  • 关于block的理解

    block的类型详解 关于block的知识,在网络上的资料那是相当的多。不过这里还是想来谈谈自己对block的理解...

  • iOS 题目详解 部分三

    主要讲解Block 内部使用strongSelf的理由和用法 iOS 题目详解 部分一iOS 题目详解 部分二...

  • Block详解

    1.Block定义及使用 首先看下Block的定义和使用。 实际使用方法 Block看起来比较复杂,在OC中实际上...

  • Block详解

    1️⃣Block的修饰 ARC情况下( ARC是iOS 5推出的新功能,全称叫 ARC(Automatic Ref...

  • block详解

    __weak typeof(self) weakSelf = self;self.handler = ^{type...

  • Block详解

    __block说明符 Block只能保存局部变量瞬间的值,所以当我们尝试修改截获的自动变量值,就会报错。例如: 该...

  • Block详解

    block的定义,调用等就不介绍了,自行去查资料。 本文介绍内容: 1.block的底层数据结构2.block的类...

网友评论

      本文标题:Block详解

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