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. C++中使用stringstream简化类型转换

    C++标准库中的<sstream>提供了一个stringstream,以前基本没用过,突然发现很好用(^-^)V 参见 http://www.cplusplus.com/reference ...

  2. 【6】Laravel5.1的migration数据库迁移

    查看Laravel5.1的目录 当你配置好数据库后,在命令行执行下边的操作 php artisan migrate 打开数据库会发现,我们的数据库多了四个表,神奇吧! 打开任意一个migration查 ...

  3. 微信分享jssdk config:invalid signature 签名错误

    使用微信分享时,按照官方给的demo,使用时一直提示签名错误. 根据微信开发文档(http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd ...

  4. Python中range的用法

    函数原型:range(start, end, scan): 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range(0, 5); end:技术到end结束,但 ...

  5. 深入理解Azure自动扩展集VMSS(1)

    前文中已经详细介绍了如何配置和部署Azure的虚拟机扩展集VMSS进行自动扩展,但在实际使用过程当中,用户会出现更进一步使用的一些问题,VMSS基本扩展原理及怎么简单调试?如何进行手动扩展?怎么使用自 ...

  6. excel筛选两列值是否相同,如果相同返回第三列值

    见图:

  7. c# post方式发送请求

    public static bool CheckNew(string serverIP) { bool passed = false; try { string url = string.Format ...

  8. keil 中用函数指针调用函数的参数限制

    NSIC中,通过函数指针调用的函数的参数的个数没有限制,但是KeilC对此有限制,至多3个参数.因为,KeilC编译时,无法通过函数指针找到该函数的局部数据段,也就无法通过局部数据段传递参数,只能通过 ...

  9. Qt Creator快捷键大全,附快捷键配置方法

    一.快捷键配置方法:   进入“工具->选项->环境->键盘”即可配置快捷键.   二.常用默认快捷键:   编号 快捷键 功能 1 Esc 切换到代码编辑状态 2 F1 查看帮助( ...

  10. GestureDetector和SimpleOnGestureListener的使用教程

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...