iphone开发学习,Block

news/2024/7/20 12:52:51 标签: 内存管理

基本使用:

    void (^vFun)()=^(void){
        NSLog(@"void function");
    };
    vFun();//void function
  //void:返回类型
  //(^vFun):vFun代表函数名
  //(xx):传入参数的类型,为空代表木有参数
  //^(xxx):block格式,xxx代表传入参数
int (^iFun)(int) = ^(int i){ return i; }; NSLog(@"%d",iFun(12345));//12345 NSString *str = @"World"; NSString* (^sFun)(NSString *, int)= ^(NSString *s1, int i){ return [s1 stringByAppendingString:str]; }; str = @"Max"; NSLog(@"%@",sFun(@"Hello ",2));//Hello World

对于sFun,创建block对象时,此对象只会捕获当前引用值。以后引用值怎么变,只会使用之前的值。

 

内存管理

  Block对象可以发送retain等消息,但Block分配于栈,函数运行结束,系统会自动释放。

  让计数器+1,可以使用copy消息。

  保留Block对象的作用:1.在Block对象的函数外能执行此Block对象。
                         2.保存Block对象引用的对象。

  使用__block修饰符,系统不再保留Block对象内,指针所指向的对象。

  如上sFun()方法,在str方法前添加__block,sFun显示:Hello Max  

__block NSString *str = @"World";

  Block对象内使用实例变量,self retainCount+1.
  可以使用局部变量。

//@property (nonatomic, strong)NSString *name;
- (void)method{
    //NSString *s = name;//name为实例变量.
    void (^aBolck)()=^(void){
        NSLog(@"Hello, %@", name);
    };
    void (^aCopy)()=[aBolck copy];
    aCopy();
    NSLog(@"%d", [self retainCount]);//不使用局部变量,值为2
}

转载于:https://www.cnblogs.com/maxfong/archive/2012/05/28/2520871.html


http://www.niftyadmin.cn/n/1813808.html

相关文章

HDU-4619 Warm up 2 二分匹配

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4619 一看就知道是二分匹配题目&#xff0c;对每个点拆点建立二分图&#xff0c;最后答案除2。因为这里是稀疏图&#xff0c;用邻接表处理。。。 1 //STATUS:C_AC_31MS_480KB2 #include <functional>3 #…

js学习整理

学习最好的检验方法是测试&#xff0c;就是coding! 当然&#xff0c;理论知识不能差&#xff0c;不然没发展。 javascript呢&#xff0c;功能很强大&#xff0c;依靠浏览器本地处理优化&#xff0c;对浏览器的依赖性也比较大。 javascript 的真实名称是ECMAScript,对于js有什么…

hdu 1421(dp)

题意&#xff1a;容易理解... 思路&#xff1a;假设开始算出搬了k次的最小疲劳度&#xff0c;然后推出搬k1次最小的疲劳度。 代码实现&#xff1a; #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std…

javascript实现评分控件

在电子商务网站中&#xff0c;会出现对于商品评分和服务态度的打分问题&#xff0c;其具体是用"★"和"☆"来区别的。其中主要的技术是使用Dom实现&#xff0c;下面请看代码&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitio…

Vue- echarts插件使用随笔(一图表)

Vue 使用 echarts 图表实例 第一步&#xff1a;安装&#xff1a;npm i -S echarts 第二步&#xff1a;创建一个plugins文件夹&#xff0c;创建echarts.js并配置 import echarts from echartsconst install function (Vue){//将 echarts 挂载到 vue 原型上Object.defineProp…

制作一个小木马的步骤

特洛依木马这个名词大家应该不陌生&#xff0c;自从98年“死牛崇拜”黑客小组公布Back Orifice以来&#xff0c;木马犹如平地上的惊雷&#xff0c;使在Dos——Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒&#xff0c;终于认识到的网络也有它邪恶的一面&#xff0c;…

Vue-echarts插件随笔(二地图)

Vue 使用 echarts 地图实例 第一步&#xff1a;安装&#xff1a;npm i -S echarts 安装echarts依赖后&#xff0c;打开node_modules下边的map文件夹里边的js。js文件下有&#xff1a; china.js–>中国地图 world.js–>世界地图 province文件夹—>各个省份地图 第二步…

【2012百度之星/资格赛】E:C++ 与Java

时间限制: 2000ms 内存限制: 65536kB描述在百度之星的贴吧里面&#xff0c;Java的爱好者和C的爱好者总是能为这两种语言哪个更好争论上几个小时。Java的爱好者会说他们的程序更加整洁且不易出错。C的爱好者则会嘲笑Java程序很慢而且代码很长。 另一个Java和C爱好者不能达成一致…