文档章节

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
关于布局网格,jquery mobile最多只支持一行三列的表格,有没一行多列的?

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

开源中国首席攻城师
2011/11/21
3K
3
iOS开发实用技巧—Objective-C中的各种遍历(迭代)方式

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

ziyuzhiye
2017/11/14
0
0
iOS - block语法块

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

水一样的人儿
2015/12/23
72
0
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

没有更多内容

加载失败,请刷新页面

加载更多

解析JQuery中each方法的使用

each() 方法规定为每个匹配元素规定运行的函数。写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 概述: each() 方法规定为每个匹配...

前端攻城小牛
9分钟前
1
0
深入解析Vue开发动态刷新Echarts组件的教程

需求背景:dashboard作为目前企业中后台产品的“门面”,如何更加实时、高效、炫酷的对统计数据进行展示,是值得前端开发工程师和UI设计师共同思考的一个问题。今天就从0开始,封装一个动态渲...

peakedness丶
22分钟前
3
0
memcached

memcached 为了避免内存碎片化(传统的内存管理方式是,使用完通过malloc分配的内存后通过free来回收内存,这种方式容易产生内存碎片并降低操作系统对内存的管理效率),采用了 slab allocatio...

Cobbage
22分钟前
2
0
keepalived的介绍及配置高可用集群

12月19日任务 18.1 集群介绍 18.2 keepalived介绍 18.3/18.4/18.5 用keepalived配置高可用集群 集群介绍 根据功能划分为2类:高可用和负载均衡 高可用集群:通常为两台服务器,一台工作,另外...

robertt15
23分钟前
5
0
WiFi攻击的三种方式

导读 WiFi的安全问题已经引起了不少的使用者重视,甚至已经出现草木皆兵的现象。那么黑客到底是如何做到绕过身份验证来获取WiFi使用权的呢?主要有以下三种方式,其中最后一种方式十分简单。 ...

问题终结者
37分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部