当前位置: 首页 > news >正文

接网站开发做多少钱排版网页设计教程

接网站开发做多少钱,排版网页设计教程,网站设计培训哪里好,最快新闻资讯在哪看Block简介 Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能:带有自动变量的匿名函数。 匿名函数 所谓匿名函数就是不带有名称的函数。C语言的标准不允许存在这样的函数。例: int func(int count);它声明了名称为func的函数。下面的源代…

Block简介

Blocks是C语言的扩充功能。可以用一句话来表示Blocks的扩充功能:带有自动变量的匿名函数。

匿名函数

所谓匿名函数就是不带有名称的函数。C语言的标准不允许存在这样的函数。例:

int func(int count);

它声明了名称为func的函数。下面的源代码中为了调用该函数,必须使用该函数的名称func。

int result = func(10);

但其实使用函数指针也仍需要知道函数名称。像以下源代码这样,在赋值函数指针时,若不使用想复制的函数的名称,就无法取得该函数的地址。

int (*funcptr)(int) = &func;
int result = (*funcptr)(10);

而通过Blocks,源代码中就能够使用匿名函数。

自动变量

首先回顾一下在C语言的函数中可能使用的变量。

  • 自动变量(局部变量)
  • 函数的参数
  • 静态变量(静态局部变量)
  • 静态全局变量
  • 全局变量

其中,在函数的多次调用之间能够传递的变量有:

  • 静态变量(静态局部变量)
  • 静态全局变量
  • 全局变量

虽然这些变量的作用域不同,但在整个程序当中,一个变量总保持在一个内存区域。因此,虽然多次调用函数,但改变量值总能保持不变,在任何时候以任何状态调用,使用的都是同样的变量值。

int buttonId = 0;
void buttonCallblack(int event) {printf("buttonId:%d event=%d\n", buttonId, event);
}

如果只有一个按钮,那么该代码毫无问题,可正常运行。但有多个按钮时会如何呢?

int buttonId;void buttonCallBack(int event) {printf("buttonId:%d event=%d\n", buttonId, event);
}void setButtonCallbacks() {for (int i = 0, i < BUTTON_MAX; ++i) {buttonId = i;setButtonCallback(BUTTON_IDOFFSET + i, &buttonCallback);}  
}

该源代码到的问题很明显。全局变量buttonId只有一个,所有回调都使用for循环最后的值。

如果不使用全局变量,回调方会将按钮的ID作为函数参数传递,就能解决该问题。

void buttonCallback(int buttonId, int event) {printf("buttonId:%d event=%d\n", buttonId, event);
}

但是,回调方在保持回调函数的指针以外,还必须保持回调方的按钮ID。

C++和Objective-C使用类可保持变量值且能够多次持有该变量自身。它会声明持有成员变量的类,由类生成的实例或对象保持该成员变量的值。

我们可以来思考一下刚才例子中用来回调按钮的类。

@interface ButtonCallbackobject : NSObject
{int buttonId_;
}
@end@implementation ButtonCallbackObject
- (id) initWithButtonId:(int)buttonId
{self = [super init];buttonId_ = buttonId;return self;
}- (void) callback:(int)event
{NSLog(@"buttonId:%d event=%d\n", buttonId_, event);
}
@end

如果使用该类,由于对象保持按钮ID,因此回调方只需要保持对象即可。可如下使用:

void setButtonCallbacks() {for (int I = 0; I < BUTTON+MAX; ++I) {ButtonCallbackObject *callbackObj = [[ButtonCallbackObject alloc] initWithButtonId:I];setButtonCallbackUsingObject(BUTTON_IDOFFSET, callbackObj);}
}

缺点:增加代码长度。

Blocks

这时我们就要用到Blocks了。Blocks提供了类似由C++和Objective-C类生成实例或对象来保持变量值的方法,其代码量与编译C语言函数差不多。如“带有自动变量值”,Blocks保持自动变量的值。下面我们使用Blocks实现上面的按钮回调:

void setButtonCallbacks()
{for (int I = 0; I < BUTTON_MAX; ++I) {setButtonCallbackUsingBlock(BUTTON_IDOFFSET + I, ^(int event) {printf("buttonID:%d event=%d\n", I, event);});}
}

该源代码将“带有自动变量i值的匿名函数”设定为按钮的回调。Blocks中将该匿名函数部分称为“Block literal”,或简称为“Block”。

像这样,使用Blocks可以不声明C++和Objective-C类,也没有使用静态变量、静态全局变量或全局变量时的问题。

Block在其他程序语言中的名称

在这里插入图片描述

http://www.yayakq.cn/news/980888/

相关文章:

  • 网站可以个人备案吗微信小程序怎么做开发
  • 公司网站建设的好处flash怎么做网页
  • 做企业内部网站要多久焦作网站开发公司电话
  • 手机版网站如何做动漫公司网站建设
  • ps做网站尺寸在万网申请的域名_需要把万网的账户密码给做网站的吗
  • 顺德水利和国土建设局网站网站修改报价
  • 第二章 网站建设艺客网站首页
  • 潮阳网站制作中国建设网上银行个人登录
  • 淘宝做链接有哪些网站可以做端口映射 wordpress
  • 用织梦做网站后面可以改吗企业公司网站模板下载
  • 没有文章更新的网站怎么做优化提供服务好的网站归档系统
  • 长春城投建设投资有限公司网站会计培训班初级费用
  • 全景旅游网站建设商务网站的建设步骤
  • php的网站模板网站全站开发
  • 网站建设一般多少钱要如何选择广东建设工程执业资格注册中心网站
  • 万网 速成网站网站编辑有前途吗
  • 泉州网站建设设计网站注册属于自己的网站
  • 卡盟网站制作教程劳务公司注册流程和费用
  • 如何选择网站关键词狮城app更多网站
  • 江苏省住房和建设部网站首页自己建设个人网站要花费多少
  • 网上做室内设计的网站广告设计专业出来做什么
  • 做网站的公司一般怎么培训销售国内较好的网站设计公司
  • 网站建设月总结亚马逊跨境电商开店
  • 中国建设银行官网首页 网站成都建设网上办事大厅
  • 西宁企业做网站wordpress自动加文章tittle
  • 华为企业建设网站的目的长沙人才网
  • 大量增加告权重网站友链回提升网站权重吗电商网站建设 教学总结
  • 标识标牌网站怎么做宁波自助建站系统
  • 广州做内销鞋的网站网站排名优化师
  • 做移门的网站人才网站开发