ios开发 block语句块
ios开发 block语句块
1.block 理解为匿名函数
2.block变量的定义
//定义block变量,^表示定义block
//技巧:函数名左右加括号,在函数名前面在加^
void (^block)(); //定义block语句块,存储到了block变量中
block=^void ()
{
NSLog(@"I am block");
}; //执行
block();
3.带有参数和返回值block
//实例 实现计算两数之和block
//int myAdd(int x,int y); int (^myAdd)(int x,int y)=^int (int x,int y)
{
return x+y;
}; int s=myAdd(,);
NSLog(@"s=%d",s);
4.block捕获外部外部变量(下面代码的_url和_page 为全局变量)
//block使用block外面的变量的注意事项
//int num=10;
__block int val=;
void (^b1)()=^void()
{
//能使用和修改实例变量
_page=;
//block中不能修改局部变量的值
//num++; //block中能修改__block修饰的局部变量
val++; //有可能有警告,因为内存问题引起,注意(用下面的方法)
//__weak typeof(self) weakSelf = self;//block外面定义
//weakSelf.url = @"text";
self.url = @"txt";
}; b1();
5.oc 中应用
(1)NSMutableArray排序(另外定义一个类Dog继承于NSObject)
Dog *huahua=[[Dog alloc] init];
huahua.nickName=@"huahua";
huahua.age=; Dog *miao=[[Dog alloc] init];
miao.nickName=@"miaomiao";
miao.age=; Dog *dahuang=[[Dog alloc] init];
dahuang.nickName=@"dahuang";
dahuang.age=; NSMutableArray *marr=[[NSMutableArray alloc] initWithArray:@[huahua,miao,dahuang]];
//marr sortUsingSelector:<#(SEL)#>//(以前用的方法)
[marr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Dog *aDog=obj1;
Dog *bDog=obj2;
//return aDog.age>bDog.age;//按年龄升序排序
//按名字排序
return [aDog.nickName compare:bDog.nickName]<;
}]; for(Dog *d in marr)
{
NSLog(@"name = %@ , age = %d",d.nickName,d.age);
}
(2)UIView动画
UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(, , , )];
label.text=@"我是label";
label.backgroundColor=[UIColor redColor];
[self.view addSubview:label]; //向下移动200
[UIView animateWithDuration: animations:^{
CGRect frame=label.frame;
frame.origin.y+=;
label.frame=frame;
} completion:^(BOOL finished) {
NSLog(@"动画结束");
label.transform=CGAffineTransformMakeRotation(M_PI);
[UIView animateWithDuration: animations:^{
CGRect frame=label.frame;
frame.origin.y-=;
label.frame=frame;
} completion:^(BOOL finished) { }];
}];
6.block实现界面反向传值
创建一个视图类SecondViewController继承于UIViewController
(1)在SecondViewController.h文件定义下面的方法
//为了给第二个界面传入block
-(void)setChangeBackgroundColor:(void (^)(NSString *color)) action;
(2)在SecondViewController.m文件实现下面的方法
-(void)btnClick
{
//改变主界面的颜色
if (_action) {
_action(@"blue");
} [self dismissViewControllerAnimated:YES completion:nil];
}
(3)在UIViewController视图实现下面方法
-(void)btnClick
{
SecondViewController *svc=[[SecondViewController alloc] init]; //设置block
[svc setChangeBackgroundColor:^(NSString *color) {
if ([color isEqualToString:@"blue"]) {
self.view.backgroundColor=[UIColor blueColor];
}
}]; [self presentViewController:svc animated:YES completion:nil];
}
经过上面三个步骤就可用block实现界面反向传值(这里传的是视图背景颜色)
ios开发 block语句块的更多相关文章
- iOS开发--Block
iOS开发--Block 1.什么是Block,block 的作用 ui开发和网络常见功能实现回调,按钮的事件处理方法是回调方法以及网络下载后的回调处理 (1)按钮 target-action 一 ...
- iOS开发——Block详解
iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...
- iOS开发 -------- Block技术中的weak - strong
一 Block是什么? 我们使用^运算符来声明一个Block变量,而且在声明完一个Block变量后要像声明普通变量一样,后面要加; 声明Block变量 int (^block)(int) = NULL ...
- iOS开发Block的介绍以及Block的循环引用问题
1:block的循环引用问题最主要记住两点: 如果[block内部]使用[外部声明的强引用]访问[对象A], 那么[block内部]会自动产生一个[强引用]指向[对象A] 如果[block内部]使用[ ...
- iOS开发-Block回调
关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...
- IOS开发之----代码块的使用(二)
iOS4引入了一个新特性,支持代码块的使用,这将从根本上改变你的编程方式.代码块是对C语言的一个扩展,因此在Objective-C中完全支持.如果你学过Ruby,Python或Lisp编程语言,那么你 ...
- iOS开发Block的使用
Block 是从 iOS4引入的,在日常开发中,会经常用到Block.特别是在多线程中,Block的用处更广泛.而且,Block不仅可以接收参数,其本身也可以作为参数,因此,Block的功能非常强大. ...
- IOS开发 Block的学习
苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用. Block最大的作用是函数回调,简化代码. 在ios中,将blocks当成对象来处理,它封装了一段代码,这段代 ...
- iOS - OC Block 代码块
前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...
随机推荐
- poj3614 贪心
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6410 Accepted: 2239 Descrip ...
- Java 中关键字transient引出序列化与反序列化
一:transient(临时的)关键字 1.transient关键字只能修饰变量,而不能修饰方法和类.注意,本地变量是不能被transient关键字修饰的. 2.被transient关键字修饰的变量不 ...
- web api简单验证实现办法
需要使用WEBAPI,但是有验证问题没解决.后来参考网上文章做了一下DEMO 思路: 就是根据用户的账号在服务端加密一个字符串,然后返回给用户端. 具体: 一个用户编号用于唯一身份识别,密码,一个密钥 ...
- windows安装Apache HTTP服务器报错:无法启动,因为应用程序的并行配置不正确
Apache HTTP服务器安装后报:无法启动,因为应用程序的并行配置不正确-(已解决) 0条评论 [摘要:本创做品,出自 “深蓝的blog” 专客,迎接转载,转载时请务必说明出处,不然有权穷究版 ...
- C++第二课(2013.9.27 )
//引用的作用:代码简洁 //形参和实参同地址,实现的方式和指针的一样 //引用和指针没有本质的区别 //强转引用 float f = 3.14f; cout<< hex << ...
- AI自动寻路
1.首先把游戏场景中的物体设为静态 2.选中Window 中的Navigation ,点击Bake进行场景烘焙 3.在需要寻路的游戏对象上添加 NavMeshAgent组件.调整其AgentSize大 ...
- 让WordPress的作者在后台只能看到自己的文章
今天需要对WordPress后台进行调整,目的是为了只能让当前用户看见自己所发表的文章,而WordPress默认是登陆用户可以看到所有用户发表的文章. WordPress中的用户角色分的比较详细,作者 ...
- C++之------进制学习
碰到一些寄出的东西不是很理解,就是关于多进制在代码中的转换: 比喻一个数number的多进制表示方法:B:二进制 Q:八进制 D:十进制 H:十六进制 二进制:0bnumber ( ...
- ps存jpeg,格式保存的时候为什么选择“基线”
jpeg是印前和网页设计常用的格式,最大好处就是能很大程度上压缩图像大小. 在ps中将图片保存为jpeg格式的时候会出现以下选项: 其中:图像选项都很熟悉,是关于图像质量的:而格式选项的用途主要是针对 ...
- 导入Excel表格到SharePoint站点
在Excel中创建表 选中所有要导入的行,点击菜单"插入"->"表格" 如果数据内容包含表头,选择"我的表格包含表头". 选择菜单 ...