文档章节

block的使用(五)

我爱觉觉
 我爱觉觉
发布于 2016/02/29 12:39
字数 371
阅读 10
收藏 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
38
0
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

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

ziyuzhiye
2017/11/14
0
0
关于布局网格,jquery mobile最多只支持一行三列的表格,有没一行多列的?

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

开源中国首席攻城师
2011/11/21
3K
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
0
iOS - block语法块

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

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

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
今天
2
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
7
3
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
4
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
2
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部