关于block

//
// XunLeiDownLoad.h
// BlockView
//
// Created by lanouhn on 15-7-18.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//

import

import “XunLeiDownLoad.h”

@implementation XunLeiDownLoad

  • (void)downLoadWithPersent:(downLoadBlock)downLoad
    {
    int a = arc4random() % 100;
    downLoad([NSString stringWithFormat:@”你已经下载了%d%%” , a]);
    }

  • (void)dailNumber:(NSString *)number toLiyangdeshouji:(liyangdeshouji)shouji
    {
    //判断你打的电话号码是否正确 , 如果正确, 扔你找到李阳 ,如果不正确,让你找不到

    if ([number isEqualToString:@”120”]) {
    shouji(@”李阳开始接听电话”);
    }
    }

@end

//
// main.m
// BlockView
//
// Created by lanouhn on 15-7-18.
// Copyright (c) 2015年 lanouhn. All rights reserved.
//

import

import “Login.h”

import “Person.h”

import “XunLeiDownLoad.h”

int a = 6;
int (^p)(int , int) = ^(int a , int b){
return a + b;
};

int main(int argc, const char * argv[]) {
@autoreleasepool {

  //block 的基本用法
    //block 的本质:匿名函数
    //block的使用:类似于函数指针的调用
    //block 的调用:可以和函数指针回调作对比
    //

    //block的定义和实现步骤
    //1.按照你要实现的功能类型定义block(= 左边)
    //2.按照你要实现的功能内容实现block(= 右边)
    //block 的实现又分三步
    //1.确定你要实现的是block(^)
    //2.确定你要实现的block所需要的参数列表是什么(C语言参数列表的写法)
    //3.实现block的功能体,也就是{}里面的内容
    //4.记得加;

// p = addTwoValue;
/*
int a = p(7 , 8);
NSLog(@”%d” , a);

    int b = (5 , 8);

    NSLog(@"%d" , b);
    */

//定义一个block  实现两个数相减
    /*
    NSInteger (^minusOfTwo)(NSInteger , NSInteger) = ^(NSInteger a , NSInteger b){
        return a - b;
    };

    NSInteger a = 8 , b = 3;
    NSLog(@"%ld" , minusOfTwo(a , b));


    //写一个用来求三个数最大值的block, 并实现block的回调

    int (^maxOfThree)(int , int , int) = ^(int a , int b , int c ){
        return a > (b > c ? b : c) ? a : (b > c ? b : c);
    };

    int max = maxOfThree(34 , 23 , 56);
    NSLog(@"%d" , max);
    */

    //实现一个block  NSNumber  + NSNumber = NSNumber
    /*
    NSNumber *(^addTwoNSNumber)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b)
    {
        NSInteger c = [a intValue] + [b intValue];
        return [NSNumber numberWithInt:c];
    };
    NSNumber *c = addTwoNSNumber(@3 , @5);

    NSLog(@"%@" , c);
    */


    //实现一个block, 将int->NSNumber
    /*
    NSNumber *(^intToNumber)(int);
    intToNumber = ^(int a){
        return [NSNumber numberWithInt:a];
    };

    NSLog(@"%@" , intToNumber(5));


   //实现block  将NSNumber->int
    int (^numberToInt)(NSNumber *);
    numberToInt = ^(NSNumber *a){
        return [a intValue];
    };

    NSNumber *a = [NSNumber numberWithInt:90];
    int result = numberToInt(a);
    NSLog(@"%d" , result);

    //实现一个block  将int->NSString
    NSString *(^intToString)(int) = ^(int b){
        return [NSString stringWithFormat:@"%d" , b];
    };

    int b = 0;
    NSString *result1 = intToString(b);
    NSLog(@"%@" , result1);
    */


    //实现一个block 将string->int
    /*
    int (^stringToInt)(NSString *) = ^(NSString *str){
        return [str intValue];
    };

    NSLog(@"%d" , stringToInt(@"12"));



    //实现一个block  NSNumber + NSNumber = NSNumber

    NSNumber *(^addTwoNumber)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
       int c = [a intValue] + [b intValue];
        return [NSNumber numberWithInt:c];
    };
    NSNumber *result = addTwoNumber(@100 , @8);

    NSLog(@"%@" , result);
    */



    //实现一个block  比较两个数的大小
    /*
    NSString *(^compare)(int , int) = ^(int a , int b){
        if (a > b) {
            return @"降序";
        } else if (a < b){
            return @"升序";
        } else {
            return @"xiangdeng";
        }
    };

    NSLog(@"%@" , compare(0 , 4));
    */


   //只要是对象  都可以调用compare方法

    //实现一个block  比较两个NSNumber的大小
    /*
    NSInteger (^cmp)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
        return [a compare:b];
    };

    NSNumber *a = @5;
    NSNumber *b = @9;
    NSInteger result = cmp(a , b);
    NSLog(@"%ld" , result);


    //按照特定的字符分割一个字符串
    NSString *str = @"234dsfdf*dfge789";
    NSArray *arr = [str componentsSeparatedByString:@"*"];
    NSLog(@"%@" , arr);
    */

    //定义一个block  分割字符串
    /*
    NSArray *(^cutString)(NSString * , NSString *) = ^(NSString *allString , NSString *cutsymbol){
        return [allString componentsSeparatedByString:cutsymbol];
    };

    NSLog(@"%@" , cutString(str , @"9"));
    */
    /*
    NSArray *(^cutString)(NSString * , NSString *) = ^(NSString *allString , NSString *cutSymbol){
        return [allString componentsSeparatedByString:cutSymbol];
    };

    NSLog(@"%@" , cutString(str , @"d"));
    */



   //block  的重定义
    /*
    //b 是一个变量

    int (^b)(int , int);

    //B 是一个类型
    typedef int (^B)(int , int);

    B bb = ^(int a , int b){
        return a + b;
    };

    NSLog(@"%d" , bb(5 , 8));

    //通过block对数组排序
    NSArray *arr = @[@6 , @8 , @3 , @9 , @10];

    //自定义一个用来排序的block

    NSComparisonResult (^paiXu)(NSNumber * , NSNumber *) = ^(NSNumber *a , NSNumber *b){
        return [a compare:b];
    };

// NSArray *newArr = [arr sortedArrayUsingComparator:paiXu];

    //使用系统默认方法  compare

// NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];

    //使用自定义的block

// NSArray *newArr = [arr sortedArrayUsingComparator:paiXu];

    NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return -[obj1 compare:obj2];
    }];


    NSLog(@"%@" , newArr);
    */

   //创建5个person对象
  /*
    Person *per1 = [Person personWithName:@"dongzholi" andAge:@40 andTelephoneNo:@"120"];
    Person *per2 = [Person personWithName:@"heyuanxiang" andAge:@19 andTelephoneNo:@"119"];
    Person *per3 =[Person personWithName:@"liyang" andAge:@34 andTelephoneNo:@"110"];
    Person *per4 = [Person personWithName:@"liuxiang" andAge:@55 andTelephoneNo:@"115"];
    Person *per5 = [Person personWithName:@"xuyabo" andAge:@13 andTelephoneNo:@"112"];

    NSArray *arr = @[per1 , per2 , per3 , per4 , per5];
    */
    //按照数组里面的年龄进行排序

// NSArray *array = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
// return [[(Person )obj1 telephoneNo] compare:[(Person )obj2 telephoneNo]];
// }];
// NSLog(@”%@” , array);

    /*
    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(sortedByName:)];


    NSArray *array = [arr sortedArrayUsingSelector:@selector(sortedByAge:)];

    NSArray *arr1 =[arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [[obj1 telephoneNo] compare:[obj2 telephoneNo]];
    }];


    NSLog(@"%@" , arr1);
    */

  //block 基本用法

// 哪一个block 先调用 , 就先走哪一个block的内部

    //block 内部 可以使用局部变量 , 但是不能修改
    //要想在block内部修改一个变量 ,必须在这个局部变量定义之前用__block来修饰
    //block 内部,即可以使用全局变量 ,又可以修改全局变量
    /*
    void (^kkk)() = ^(){

        NSLog(@"%d" , a++);
    };



    kkk();

    __block int b = 8;

    void (^hhh)() = ^(){
        NSLog(@"%d" , b++);
    };

    hhh();

    NSLog(@"a = %d , b = %d" , a , b);
    */


 //block 值的回调  , 主要作用是把值从内部传出来

// 创建一个login对象

    Login *login = [[Login alloc] init];

    //用login对象调用登录方法

    [login loginWithName:@"111" andPassWord:@"222" success:^(NSString *str) {
        NSLog(@"%@" , str);

    } failed:^(NSString *str) {
        NSLog(@"%@" , str);
    }];



//创建一个对象

// XunLeiDownLoad *down = [[XunLeiDownLoad alloc]init];
//
// [down downLoadWithPersent:^(NSString *str) {
// NSLog(@”%@” , str);
// }];
//
//
//
//
// [down dailNumber:@”120” toLiyangdeshouji:^(NSString *str) {
// NSLog(@”%@” , str);
// }];

}
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值