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语句块的更多相关文章

  1. iOS开发--Block

    iOS开发--Block 1.什么是Block,block 的作用 ui开发和网络常见功能实现回调,按钮的事件处理方法是回调方法以及网络下载后的回调处理 (1)按钮 target-action   一 ...

  2. iOS开发——Block详解

    iOS开发--Block详解 1. Block是什么 代码块 匿名函数 闭包--能够读取其他函数内部变量的函数 函数变量 实现基于指针和函数指针 实现回调的机制 Block是一个非常有特色的语法,它可 ...

  3. iOS开发 -------- Block技术中的weak - strong

    一 Block是什么? 我们使用^运算符来声明一个Block变量,而且在声明完一个Block变量后要像声明普通变量一样,后面要加; 声明Block变量 int (^block)(int) = NULL ...

  4. iOS开发Block的介绍以及Block的循环引用问题

    1:block的循环引用问题最主要记住两点: 如果[block内部]使用[外部声明的强引用]访问[对象A], 那么[block内部]会自动产生一个[强引用]指向[对象A] 如果[block内部]使用[ ...

  5. iOS开发-Block回调

    关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发 ...

  6. IOS开发之----代码块的使用(二)

    iOS4引入了一个新特性,支持代码块的使用,这将从根本上改变你的编程方式.代码块是对C语言的一个扩展,因此在Objective-C中完全支持.如果你学过Ruby,Python或Lisp编程语言,那么你 ...

  7. iOS开发Block的使用

    Block 是从 iOS4引入的,在日常开发中,会经常用到Block.特别是在多线程中,Block的用处更广泛.而且,Block不仅可以接收参数,其本身也可以作为参数,因此,Block的功能非常强大. ...

  8. IOS开发 Block的学习

    苹果公司正在大力推广Block块语法的使用,据说Block会迟早取代一般协议代理的使用. Block最大的作用是函数回调,简化代码. 在ios中,将blocks当成对象来处理,它封装了一段代码,这段代 ...

  9. iOS - OC Block 代码块

    前言 Block 是一段预先准备好的代码,可以在需要的时候执行,可以当作参数传递.Block 可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.Block 是 C 语言的,类似于一个 ...

随机推荐

  1. cobar和tddl分享

    Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务.那么具体说说我们为什么要用它,或说cobar--能干什么?以下 ...

  2. xml解析,练习

    <collection shelf="New Arrivals"><movie title="Enemy Behind">   < ...

  3. php array_combine 把array的默认键改成指定的字符串

    array(2) { [0] => array(6) { [0] => string(1) "1" [1] => string(10) "1470650 ...

  4. NSString 去掉前后空格或回车符

    NSString *string = @" spaces in front and at the end "; NSString *trimmedString = [string ...

  5. JavaWeb学习笔记--2.3内置对象

    参考资料:http://www.cnblogs.com/qqnnhhbb/archive/2007/10/16/926234.html 目录 1. JSP内置对象分类2. 属性保存范围 2.1 pag ...

  6. yii CMenu的配置(导航栏)

    给主键的li 和a标签添加元素$this->myMenu = array( 'id'=>'myMenu', 'items'=>array( array( 'label'=>'H ...

  7. hdu 1317 XYZZY

    http://acm.hdu.edu.cn/showproblem.php?pid=1317 #include <cstdio> #include <queue> #inclu ...

  8. poj2975--Nim

    题意:对于一个给定的取石子游戏,有多少种先手策略获胜? Ans:若无法获胜,则输出0. 若能获胜我们只要找到一堆石子,使得我们能取它的一部分让总和的异或和变为0.我们先将整个游戏的值异或起来为s 则a ...

  9. Sql server中Collation conflict问题

    SQL语句查询时select A.Code,A.Name,a.Systemcode,B.ID,B.LogType,B.DMCode,B.IP,B.Department,B.CreateBy,B.Cre ...

  10. 记一次 java程序优化

    优化原因 环境中部署两个程序: web应用 tomcat   10G(webservice服务端,前端web服务) java应用               5G(webservice客户端,sock ...