//https://www.jianshu.com/p/d28a5633b963

#import <Foundation/Foundation.h>

void (^FFGlobalBlock)(void) = ^{
NSLog(@"");
};
int main(int argc, const char * argv[]) {
@autoreleasepool {
FFGlobalBlock();
     // NSGlobalBlock NSMallocBlock NSStackBlock(在ARC下基本不可能出现)
NSLog(@"%@", [FFGlobalBlock class]);
// 在函数内定义,但是Block没有引用外部变量,故是 NSGlobalBlock
void(^FFGlobalBlock2)(void) = ^{
NSLog(@"");
};
FFGlobalBlock2();
NSLog(@"%@", [FFGlobalBlock2 class]); /// 在ARC下,自动生成将block从Stack上复制到Malloc上的代码。
/// 这些情况下栈上的代码将copy到malloc上。
/// 调用Block的Copy方法。
/// 将Block作为函数的返回值。
/// 将Block复制给__strong修饰的变量时。
/// 向cocoa框架中含有usingBlock的方法或者GCD的API传递Block参数时。 /// RAC下对象的默认修饰符是 automic readwirte Strong 此时在ARC下是 NSMallockBlock。 在MRC下是 NSStackBlock。 /// Block会截获自动变量。会在block中复制一份只想该变量的指针。故不能修改值,但如果是对象的话可以对对象里的属性进行操作,如果是Person实例,不能修改这个实例,但是可以修改他的属性,即更改Person的Name,age等。
/// __block修饰的自动变量可以进行修改是因为 将__block修饰的自动变量封装成立一个结构体放在malloc上,以便从栈上或堆上访问和修改同一份数据。 int i = ;
void(^FFMallocBlock)(void) = ^{
NSLog(@"%d", i);
};
/// 如果想修改的话,用__block修饰block
i = ;
FFMallocBlock();
NSLog(@"%d", i);
NSLog(@"%@", [FFMallocBlock class]); NSLog(@"---%@", [^{NSLog(@"%d", i);} class]);
} /// 避免block的循环引用的三种方法。
/// 1: 使用__weak修饰。通常与__strong配合使用
/// 2: 使用__block修饰。问题,必须调用一次,并且要置为nil 否则存在内存泄漏。
// __block XXViewcontroller *weakSelf = self;
// self.blk = ^{
// NSLog(@"%@", weakSelf);
// weakSelf = nil;
// }
/// 3: 以参数的形式传入。可以避免
// self.block = ^(ViewController *vc){
// NSLog(@"%@", vc.name);
// } return ;
}

iOS Block初探的更多相关文章

  1. iOS Block界面反向传值

    在上篇博客 <iOS Block简介> 中,侧重解析了 iOS Block的概念等,本文将侧重于它们在开发中的应用. Block是iOS4.0+ 和Mac OS X 10.6+ 引进的对C ...

  2. iOS block从零开始

    iOS block从零开始 在iOS4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调. block的结构 先来一段简单的代码看看: void ...

  3. iOS block 机制

    本文要将block的以下机制,并配合具体代码详细描述: block 与 外部变量 block 的存储域:栈块.堆块.全局块 定义 块与函数类似,只不过是直接定义在另一个函数里,和定义它的那个函数共享同 ...

  4. ios Block详细用法

    ios Block详细用法 ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的 ...

  5. iOS Block的本质(四)

    iOS Block的本质(四) 上一篇文章iOS Block的本质(三)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block内修改变量的值 int main(int ar ...

  6. # iOS Block的本质(三)

    iOS Block的本质(三) 上一篇文章iOS Block的本质(二)中已经介绍过block变量的捕获,本文继续探寻block的本质. 1. block对对象变量的捕获,ARC 环境 block一般 ...

  7. iOS Block的本质(二)

    iOS Block的本质(二) 1. 介绍引入block本质 通过上一篇文章Block的本质(一)已经基本对block的底层结构有了基本的认识,block的底层就是__main_block_impl_ ...

  8. iOS Block的本质(一)

    iOS Block的本质(一) 1.对block有一个基本的认识 block本质上也是一个oc对象,他内部也有一个isa指针.block是封装了函数调用以及函数调用环境的OC对象. 2.探寻block ...

  9. (译)IOS block编程指南 1 介绍

    Introduction(介绍) Block objects are a C-level syntactic and runtime feature. They are similar to stan ...

随机推荐

  1. SqlDataHelper

    using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...

  2. [SoapUI] 比较JSON Response

    比较两个JSON, ID是数字时,处理成统一的格式:只保留小数点后5位 package direct; import org.json.JSONArray; import org.json.JSONE ...

  3. 深入应用c++11 随书代码

    代码并未在作者github上提供 将书中代码敲至vc 并调试运行 依赖BOOST库 编译环境vs2015 boost1.59 // Client.cpp : 定义控制台应用程序的入口点. // #in ...

  4. 2018.10.09 NOIP模拟 世界杯(图论+set优化)

    传送门 貌似是防akakak题? 不是很清楚. 事实上如果两个人没有严格的大小关系,我们给他们两个连一条边. 这样可以构成很多连通块. 而且对于连通块a,ba,ba,b,aia_iai​和bjb_jb ...

  5. 2018.06.29 洛谷P1505 [国家集训队]旅游(树链剖分)

    旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有 ...

  6. Duplicate entry '1' for key 'PRIMARY'

    这个bug产生在你建立主键的时候,就是说主键的id重复了,有两个同名的id,需要删除一个,才能满足主键的唯一性

  7. FIR IP

    (1)多通道系数处理 系数的格式 (1)       每组系数的长度必须一样长: (2)多组系数依次连接即可; 添加多组系数后会,FIR IP核在生成时会多出以下几个信号 .s_axis_config ...

  8. ansible-playbook api 2.0 直接运行

    官方文档见  http://docs.ansible.com/ansible/dev_guide/developing_api.html 拿官方的例子修改如下 import json from col ...

  9. 简单的nginx模拟网站的负载均衡

    环境:nginx1.10.3 虚拟机环境:3台centos7虚拟机 将148机器作为转发服务器配置如下 监听80端口,在http里面配置如下 将edc.com分别转发到149和150的服务器上 本地主 ...

  10. Java多线程-并发协作(生产者消费者模型)

    对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的.就像学习每一门编程语言一样,Hello World!都是最经典的例子. 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓 ...