博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios开发 block语句块
阅读量:5162 次
发布时间:2019-06-13

本文共 3148 字,大约阅读时间需要 10 分钟。

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(10,40);    NSLog(@"s=%d",s);

4.block捕获外部外部变量(下面代码的_url和_page 为全局变量)

//block使用block外面的变量的注意事项     //int num=10;    __block int val=100;    void (^b1)()=^void()    {        //能使用和修改实例变量        _page=1;        //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=4;        Dog *miao=[[Dog alloc] init];    miao.nickName=@"miaomiao";    miao.age=3;        Dog *dahuang=[[Dog alloc] init];    dahuang.nickName=@"dahuang";    dahuang.age=5;        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]<0;    }];        for(Dog *d in marr)    {        NSLog(@"name = %@ , age = %d",d.nickName,d.age);    }

(2)UIView动画

UILabel *label=[[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];    label.text=@"我是label";    label.backgroundColor=[UIColor redColor];    [self.view addSubview:label];        //向下移动200    [UIView animateWithDuration:2 animations:^{        CGRect frame=label.frame;        frame.origin.y+=200;        label.frame=frame;    } completion:^(BOOL finished) {        NSLog(@"动画结束");        label.transform=CGAffineTransformMakeRotation(M_PI);        [UIView animateWithDuration:2 animations:^{            CGRect frame=label.frame;            frame.origin.y-=200;            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实现界面反向传值(这里传的是视图背景颜色)

 

转载于:https://www.cnblogs.com/DWdan/p/4399171.html

你可能感兴趣的文章
springboot整合webservice
查看>>
字符串匹配KMP算法详解
查看>>
单词查找排序输出
查看>>
TCP三次握手和四次挥手及用户访问网页流程
查看>>
echo常用操作
查看>>
算法笔记
查看>>
LeetCode 237. Delete Node in a Linked List 删除链表结点(只给定要删除的结点) C++/Java...
查看>>
LCA倍增模板
查看>>
EMS-Demo 雇员管理系统演示
查看>>
软件工程第二次作业——心得体会(结对编程)
查看>>
ORA-12560: TNS: 协议适配器错误 ORA-12154: TNS: 无法解析指定的连接标识符
查看>>
读书印记 - 《菊与刀》
查看>>
第一个小demo: spring boot + mybatis + thymeleaf
查看>>
mysql获取字段信息
查看>>
Tomcat 网站部署(三)
查看>>
JS实现全选与取消 Jquery判断checkbox是否被选中
查看>>
如果重新设计网络,有没有可能合并IP地址跟MAC地址?
查看>>
德州扑克总纲
查看>>
linux下password的用法
查看>>
[poj1986]Distance Queries(LCA)
查看>>