文档章节

block的使用(五)

我爱觉觉
 我爱觉觉
发布于 2016/02/29 12:39
字数 371
阅读 9
收藏 0
点赞 1
评论 0

如何把ARC改为MRC

项目-build Settings - levels - 搜索auto - 找到Objective-C Automatic Reference Counting-该为no。

Xcode缓存路径

/Users/zhangpingan/Library/Developer/Xcode/DerivedData

//  block的分类

//  1)全局的block,存在于BSS

//  i。定义在函数外部

//  ii。在block的内部没有使用外部局部变量

//




#import <Foundation/Foundation.h>


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

    @autoreleasepool {

        

        int n = 5;

        

        //定义一个block

        //ARC

        //   __NSGlobalBlock__ (全局的block)

        //   1) block的内部不能使用 外部的局部变量

        

        //ARC

        //   __NSMallocBlock__ (block)

        //   1) block的内部使用了外部变量

        

        //MRC

        //  __NSStackBlock__

        //  1) block内部使用了外部变量

        

        //  __NSMallocBlock__

        //  1) 对栈block进行一次 copy 则得到一个堆的block


        void (^myblock)() = ^{

            

        };

        NSLog(@"myblock = %@",myblock); //ARC下运行 myblock = <__NSGlobalBlock__: 0x100001060>

                                        // myblock = <__NSGlobalBlock__: 0x100001050>

        void (^myblock1)() = ^{

            NSLog(@"%d",n);

        };

        NSLog(@"myblock1 = %@",myblock1);//ARC  myblock1 = <__NSMallocBlock__: 0x1006001e0>

                                         //MRC  myblock1 = <__NSStackBlock__: 0x7fff5fbff750>

        

        void(^myblock2)() = [myblock1 copy];

        NSLog(@"myblock2 = %@",myblock2); // MRC myblock2 = <__NSMallocBlock__: 0x100300020>

    }

    return 0;

}

block变量为什么使用copy

//  Person.h

#import <Foundation/Foundation.h>


@interface Person : NSObject

// ARC block类型的变量 strong相当于copy

// 但是我们不会直接写成strong 而是使用copy

//@property (nonatomic, assign) void(^myblock)(); 这个是错误的。不能使用assign

@property (nonatomic, copy) void(^myblock)();

- (void)test;


@end

#import "Person.h"


@implementation Person

- (void)test {

    int i = 4;

    self.myblock = ^{

        NSLog(@"test block i = %d",i);

    };

}

@end


main.m        

int n = 5;

        Person *p = [[Person alloc]init];

        [p setMyblock:^{

            NSLog(@"CCCCC ");

        }];

        NSLog(@"p.myblock = %@",p.myblock); // p.myblock = <__NSGlobalBlock__: 0x100001100>

        

        

        [p setMyblock:^{

            NSLog(@"CCCCC n = %d",n);

            

        }];

        NSLog(@"p.myblock = %@",p.myblock); //MRCARC p.myblock = <__NSStackBlock__: 0x7fff5fbff718>


        [p test]; // block已经在这里销毁

        p.myblock(); // 报野指针错误,所以block不能使用assign



© 著作权归作者所有

共有 人打赏支持
我爱觉觉
粉丝 2
博文 49
码字总数 10640
作品 0
海淀
IOS--Block入门

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

Mark_Jiang ⋅ 2016/01/07 ⋅ 0

iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

一、使用for循环 优点:简单 缺点:由于字典和集合内部是无序的,导致我们在遍历字典和集合的时候需要借助一个新的『数组』作为中介来处理,多出了一部分开销。 二、使用NSEnumerator遍历 优...

ziyuzhiye ⋅ 2017/11/14 ⋅ 0

关于布局网格,jquery mobile最多只支持一行三列的表格,有没一行多列的?

Block A Block B Block C 求解?有没四列五列的?

开源中国首席攻城师 ⋅ 2011/11/21 ⋅ 3

linux 中的sar命令 与gnuplot绘图

一.简单介绍 1.安装软件 yum install sysstat [root@node1 sa]# rpm -ql sysstat/etc/cron.d/sysstat/etc/rc.d/init.d/sysstat/etc/sysconfig/sysstat/etc/sysconfig/sysstat.ioconf/usr/bin......

a8757906 ⋅ 2017/07/12 ⋅ 0

iOS - block语法块

block语法块,类似于方法,分为无返回值无参数,有返回值有参数,有返回值无参数,有返回值有参数。block的声明,block的调用。block整体作为属性,block整体作为函数中的参数的使用。 把blo...

水一样的人儿 ⋅ 2015/12/23 ⋅ 0

block语法

一、block应用范围 1、动画的转场 2、网络的事件处理 3、两个对象或者多个对象之间的通讯 4、多线程的处理 (从iOS4.0开始就应用得非常广泛) 二、Block block和C语言中的函数(函数指针)有...

Cy_Star ⋅ 2017/11/22 ⋅ 0

iOS __block,__weak,__strong 的理解

block 在 block 里面可以访问局部变量,但是不能修改局部变量,这是因为当局部变量在 block 中使用时,实际上是使用的变量在 block 中复制的数据,所以在 block 中修改的变量并不能修改 bloc...

旅途开发者 ⋅ 2017/12/29 ⋅ 0

阿里Java开发手册思考(五)

题图:by pixel2013 From pixabay 上期我们分享了Java中日志的处理(下):Java中日志实际使用中的相关注意点 本期我们将分享Java中异常的处理 异常定义 在《java编程思想》中这样定义异常:...

史培培 ⋅ 2017/12/17 ⋅ 0

去除inline-block元素间间距的N种方法

一、现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,很简单的个例子: <input /> <input type="submit" /> 间距就来了~~ 我们使用CSS更改非inlin...

i33 ⋅ 2012/09/28 ⋅ 1

MySQL硬件优化

一.NUMA设置 单机单实例,建议关闭NUMA,关闭的方法有三种: 1.硬件层,在BIOS中设置关闭; 2.OS内核,启动时设置numa=off; 3.可以用numactl命令将内存分配策略修改为interleave(交叉) nu...

zgnzgn1990zgn ⋅ 2017/10/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vim编辑模式、命令模式

编辑模式 vim要从一般模式进入编辑模式只要按字母 i 、I、a、A、o、O键就可以了 要从编辑模式回到一般模式按键盘上的Esc键即可。 按键 作用 i 在当前字符前插入 I 在光标所在行的行首插入 o ...

黄昏残影 ⋅ 23分钟前 ⋅ 0

OSChina 周五乱弹 —— 如果有一天不当程序员了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @guanglun :分享off的单曲《我唱情歌给你听》 《我唱情歌给你听》- off 手机党少年们想听歌,请使劲儿戳(这里) @小小编辑 :#如果不做程序...

小小编辑 ⋅ 29分钟前 ⋅ 4

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部