国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

iOS開發之Block

2019-11-14 19:18:10
字體:
來源:轉載
供稿:網友

iOS開發之Block

  1.什么是block,block的作用

  UI開發和網絡常見功能實現回調, 按鈕的事件處理方法是回調方法, 網絡下載后的回調處理

(1) 按鈕 target-action  一個方法傳入按鈕中

(2) 表格視圖      傳入一個指針self, 回調視圖控制器中的方法

(3) block       語句塊, 解決回調, 理解為"匿名函數", 定義在方法里面

  2.block的基本使用(語法)

  涉及知識點:

定義block變量,定義block語句塊

block參數和返回值

block捕獲外部變量(包括self)

 //block 理解為匿名函數        //void func()    //{    //}        //1.block變量的定義    //技巧: 語法詭異    // void func();        //定義block變量,^表示定義block,    //技巧: 函數名左右加括號,在函數名前面加^    void (^block)();        //定義block語句塊,存儲到block變量中    block = ^void ()    {        NSLog(@"block block block");    };        //執行block    block();        //2.帶參數和返回值的block    //實例  實現計算兩數之和的block//    int (^MyAdd)(int x,int y);//    MyAdd = ^int(int x,int y)//    {//        return x+y;//    };        int (^MyAdd)(int x,int y) = ^int(int x,int y)    {        return x+y;    };    NSLog(@"%d",MyAdd(10,20));        //3.block捕獲外部變量    //block使用block外部變量的注意事項//    int num = 10;    __block int val = 100;    __weak typeof(self) weakSelf = self;    void (^b1)() = ^void()    {    //全局變量可以修改        _page = 10;    //不可修改//        num = 11;        //__block變量可以修改        val = 101;        //有可能有警告,因為內存問題引起,注意        //__weak typeof(self) weakSelf = self;//在block外面定義weakSelf        //weakSelf.url = @"text";//        self.url = @"text";        weakSelf.url = @"text";        NSLog(@"1%@",weakSelf.url);    };    b1();

  3.block在開發中應用(OC,UI,網絡)

(1)使用block實現排序

//    //    Dog *ahua = [[Dog alloc] init];    ahua.nickname = @"ahua";    ahua.age = 4;        Dog *amiao = [[Dog alloc] init];    amiao.nickname = @"amiao";    amiao.age = 3;        Dog *dahuang = [[Dog alloc] init];    dahuang.nickname = @"dahuang";    dahuang.age = 5;        NSMutableArray *muArr = [[NSMutableArray alloc] initWithArray:@[ahua,amiao,dahuang]];//    muArr sortUsingSelector:<#(SEL)#>    [muArr 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 muArr)    {        NSLog(@"nickname:%@  age:%d",d.nickname,d.age);    }    

(2)使用block實現動畫

 //2.UIView動畫    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];    label.text = @"我是label";    label.backgroundColor = [UIColor redColor];    [self.view addSubview:label];        ////    [UIView animateWithDuration:<#(NSTimeInterval)#> animations:<#^(void)animations#>];    [UIView animateWithDuration:2 animations:^{        CGRect frame = label.frame;        frame.origin.y += 200;        label.frame = frame;    } completion:^(BOOL finished) {        NSLog(@"動畫1結束");        [UIView animateWithDuration:1 animations:^{            label.transform = CGAffineTransformMakeRotation(M_PI);                    } completion:^(BOOL finished) {            NSLog(@"動畫2結束");        }];    }];

(3)使用block實現界面傳值

若有兩個界面A界面、B界面, A界面創建B界面, B界面值傳遞到A界面

A界面的轉跳函數處設置block

- (void)click:(UIButton *)but{    SecondViewController *svc = [[SecondViewController alloc] init];        //設置block    [svc setChanhgeBackgeoundColor:^(NSString *color) {        if ([color isEqualToString:@"blue"]) {            self.view.backgroundColor = [UIColor blueColor];            NSLog(@"改變主界面顏色");        }    }];        [self PResentViewController:svc animated:YES completion:nil];}

B界面保存block

@interface SecondViewController : UIViewController// void action(NSString *color);// void (^action)(NSString *color);//為了給第二個界面傳入block-(void)setChanhgeBackgeoundColor:(void (^)(NSString *color))action;@end

B界面執行A界面傳遞來的block

//創建分類@interface SecondViewController (){    //定義一個block類型的變量,為了保存傳入的參數    void (^_action)(NSString *color);}@end
//將傳過來的block存為全局變量- (void)setChanhgeBackgeoundColor:(void (^)(NSString *))action{    _action = action;}
//在點擊返回事件中執行block,因為block被全局變量保存,所有blick可以在這個viewcontrol的任意地方執行- (void)click:(UIButton *)but{    //改變主界面的顏色    if (_action) {        _action(@"blue");        NSLog(@"vc2點擊結束");    }                [self dismissViewControllerAnimated:YES completion:nil];}

點擊下載完整代碼


上一篇:iOS網絡基礎

下一篇:Unicode轉化為漢字

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仪征市| 松潘县| 宿松县| 织金县| 寿宁县| 封开县| 双鸭山市| 万安县| 神农架林区| 湘乡市| 肃北| 武清区| 靖边县| 大姚县| 凤凰县| 城固县| 永嘉县| 米脂县| 敦化市| 陵川县| 荥阳市| 黄大仙区| 东山县| 当阳市| 商洛市| 西城区| 克山县| 朝阳区| 镇原县| 云南省| 天津市| 漳州市| 如东县| 察哈| 揭东县| 隆尧县| 方城县| 西乌珠穆沁旗| 清徐县| 喀喇沁旗| 临沭县|