OC_block

block 的四种形式

// 1. 无参数, 无返回值
void(^block)() = ^(){
    // 函数大括号里的代码段
    NSLog(@"我真帅");
};

// block 的使用
block();
// block 自己不会执行,必须调用才会执行block大括号里的代码段

// 2. 有参数, 无返回值
void(^block)(int, int) = ^(int a, int b){
int max = a > b ? a : b;
    NSLog(@"%d", max);
};

// 调用
block(10, 20);
// void(^)(int, int) 是 block 的类型, 它的名是 block 我们也可以通过名进行调用

// 参数是一个数组, 对数组进行遍历
void(^block)(NSArray *) = ^(NSArray *arr)
{
    for (NSString *str in arr) {
        NSLog(@"%@", str);
    }
};
NSArray *arr = @[@"6", @"3", @"1", @"2", @"9", @"5"];
block(arr);

// 3. 有返回值, 无参数
// 有返回值在函数段的最后加上return;

NSInteger(^block)() = ^()
{
    return (NSInteger)100;
};
// block 调用时没有参数也要加上括号
NSLog(@"%ld", block());

// 4. 有参数, 有返回值

NSString *(^block)(NSArray *, NSInteger) = ^(NSArray *arr, NSInteger index)
{
    return arr[index];
};
NSLog(@"%@", block(@[@"1", @"2"], 1));

NSInteger (^block)(NSString *) = ^(NSString *str)
{
    return str.integerValue;
};
NSLog(@"%ld", block(@"232h323"));

NSDate *(^block)(NSString *) = ^(NSString *str)
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    return [formatter dateFromString:str];
};
NSLog(@"%@", block(@"2015-10-13 12:43:24"));

// block 的函数段中更多使用参数,而返回值更多的是调用一方使用

通过新的block 写一个block

typedef NSString *(^Block)(NSArray *);

Block block = ^(NSArray *arr){
return arr[0];
};

block 和 局部变量

// __block 相当于给a一个在block中修改的权限, 否则它只能取值, 不能赋值

__block int a = 10;

void(^block)() = ^
{
    a = 10 * a;
    NSLog(@"%d", a);
};

block();

// 通过block对数组进行遍历

NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", nil];

// 系统的block
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"%@", obj);
}];

// 系统block的用法就是回车

多态

// 准备创建两个类 BaseModel 和 Person,Person 是 BaseModel 的子类

BaseModel.m 文件

+(id)baseWithName:(NSString *)name
              sex:(NSString *)sex
{
    // 多态的方式完成对象的创建
    id obj = [[[self class] alloc] initWithName:name sex:sex];
    return obj;
}

main.m文件

Person *per = [Person baseWithName:@"张阳阳" sex:@"男"];
NSLog(@"%@", per.name);

数组排序

// 数组对字符串的排序

// 不可变数组
NSArray *arr = @[@"zhangyangyang", @"wuhe", @"liushanshan", @"yangli", @"wangjunmin"];

// SEL是方法选择器,它是方法选择器的类型
NSArray * newArr = [arr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", newArr);

// 可变数组
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"zhangyangyang", @"wuhe", @"liushanshan", @"yangli", @"wangjunmin", nil];
[arr sortUsingSelector:@selector(compare:)];
NSLog(@"%@", arr);

// 对对象进行排序

// 新建4个人的对象
Person *per1 = [Person baseWithName:@"limuran" sex:@"nv"];
Person *per2 = [Person baseWithName:@"wuhe" sex:@"nan"];
Person *per3 = [Person baseWithName:@"liuxinqi" sex:@"nan"];
Person *per4 = [Person baseWithName:@"shangshuai" sex:@"nan"];
NSArray *arr = @[per1, per2, per3, per4];

// 以学生的姓名作为排序的依据
// 不可变数组
NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person* obj1, Person* obj2) {
    return [obj1.name compare:obj2.name];
}];

for (Person *temp in newArr) {
    NSLog(@"%@", temp.name);
}

// 可变数组    
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:per1, per2, per3, per4, nil];

[mArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    Person *per11 = (Person *)obj1;
    Person *per22 = (Person *)obj2;
    return [per11.name compare:per22.name];
}];

for (Person *per in mArr) {
    NSLog(@"%@", per.name);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值