文档章节

block的使用(三)

我爱觉觉
 我爱觉觉
发布于 2016/02/29 11:24
字数 323
阅读 8
收藏 0

// 栈区,堆区,BSS,数据区,代码区


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    @autoreleasepool {

        

        // 第一种和第二种

        //int i = 10; // 栈区

        

        // 第三种 __block修饰符告诉编译器,i的值可以在block内部修改(忽略检查)

        // 注意:一旦使用__block修饰之后,以后使用的都是堆区的变量。

        __block int i = 10;

        

        NSLog(@"i = %d, i addr = %p", i,&i); // i = 10, i addr = 0x7fff5fbff77c

        

        // 定义一个无参无返回值的block

        // 注意在block代码块的内部使用外部变量,

        // 1)block定义的时候,把block外部的变量的值copy到了内存的堆区

        // 2)拷贝的过程中使用了const(以const的形式把外部变量做了一个copy

        void (^myblock)() = ^{

            

            // 第一种

            // i = 100; 会报错

            // block 代码块

            // 1)能否使用变量i

            //NSLog(@"i = %d", i); // i = 10

            // 2)变量i存储在哪个内存区域

            //NSLog(@"i addr = %p",&i); // addr = 0x100102750 堆区

            

            // 第二种

            //int i = 100; // 这是定义一个局部变量 栈区

            //NSLog(@"i = %d", i); // i = 100

            //NSLog(@"i addr = %p",&i); // addr = 0x7fff5fbff72c

            

            // 第三种 一定要修改i

            i = 100;

            NSLog(@"i = %d, i addr = %p", i,&i); //i = 100, i addr = 0x1004004b8

            

        };

        myblock();

        

        i = 20;

        NSLog(@"i = %d, i addr = %p", i,&i); //i = 20, i addr = 0x7fff5fbff77c

                                             // i = 20, i addr = 0x1004004b8 第三种


        

    }

    return 0;

}


© 著作权归作者所有

共有 人打赏支持
我爱觉觉
粉丝 2
博文 49
码字总数 10640
作品 0
海淀
iOS之Block详解

iOS Block实例:https://my.oschina.net/Jacedy/blog/842167 一、Block定义 闭包是一个函数(或指向函数的指针),再加上该函数执行的外部的上下文变量(有时候也称作自由变量)。 block 实际...

_子墨
2016/03/01
371
0
IOS--Block入门

Block介绍 一:Block是一种具有匿名功能的内嵌函数,特性如下: (1):如一般函数能拥有带有型态的参数 (2):拥有回传值 (3):可以获取和选择性地修改作用域的状态 二:Block的使用 Bl...

Mark_Jiang
2016/01/07
38
0
Block 在不同情况下的变量存储区域

一.如果只使用全局或静态变量或不使用外部变量, 那么Block块的代码会存储在全局区; 二.如果使用了外部变量, 在ARC中, Block块的代码会存储在堆区; 在MRC中, Block快的代码会存储在栈区; 三....

JasonMs
2015/09/05
405
0
iOS中block的使用

一、block简介 block代码块是在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,block是一种特殊的数据类型,其可以正常定义变量、作为参数、作为返回值,blcok还可以保存一段代码,在...

勤劳的小QQ
2017/04/21
0
0
iOS之Block-终结篇

前言 小时候家长和老师都教导我们,做人要善良要懂得吃亏.长大以后,才知道这样真的不好,有的时候你越是忍让越是糟糕,难受的是自己,有一句话说的很好:草木有本心,何须美人折? 活出自己最重要!...

有毒的程序猿
2017/03/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——命令模式

参考博客 1. 认识命令模式 1. 定义:将一个请求封装成为一个对象,从而可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销操作。 2. 组织结构: Commond:定义命令的...

江左煤郎
13分钟前
0
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
6
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0
JAVA 内存回收

参考:https://www.cnblogs.com/leesf456/p/5218594.html 1,JMV 中哪些可以作为 GC Root? 1. 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 2. 方法区中的类静态属性引...

Carlyle_Lee
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部