本文只是对 Block语法的简单介绍.其实 Block语法在 OC 中是比较重要的,后期还会学习Block的高级知识.
语法糖是对集合和字符串操作的简化,有助于我们快速对字符串和集合进行操作.
一 Block的语法
1. Block 的语法跟函数指针的语法差不多.
2. Block 块语法,可以用 block 去保存一段代码,或者说是去封装一段代码.
3. Block 是由 c语言实现的,执行效率很高,在后面经常是用.
4. Block 实际上借鉴了函数指针的语法
5. Block 的数据类型
返回值类型 (^)(参数类型1,参数名2,参数名2……)
返回值类型 (^)();没有参数的 block 类型
注意:
1⃣ 没有参数,括号也不能省略
2⃣ 参数名可以省略
3⃣ 如果 block 与返回值,需要使用 return 返回数据
4⃣ 给 block 赋值的时候参数名必须写
6. Block 语法
Int(^P)(int,int) = ^(int a,int b){
return a + b;
};
7. 使用 typedef 为 block 起别名,用来简化代码
8. block 内部访问变量
1⃣ 全局变量 block 可以直接使用,不需要加_ block 修饰;
2⃣ 局部变量需要使用_ block 修饰才能在 block 内部修改;
3⃣ 局部变量不加_ block 修饰,只能使用,不能修改
9. block对数组进行排序
NSMutableArray *mArray =[[NSMutableArray alloc]initWithObjects:
@”red”,@”yellow”,@”white”,@”blue”,@”black”,nil];
[mArray sortUsingComparator:^NSComparisonResult(NSString*obj1,NSString obj2){
if([obj1 compare:obj2] == 1){
return NSOrderedDescending;
}else if([obj1 compare:obj2]){
return NSOrderedSame;
}else{
return NSOrderedAscending;
}
}]
NSLog(@”%@”,mArray);
10. 字面量(语法糖Literals)
1⃣ 字面量:是一种简易的表示方式
2⃣ NSNumber *number = [NSNumber numberWithInt:100];
NSNumber *number = @100;
NSArray *array = [NSArray arrayWithObjects:@”2”,@”3”,nil];
NSArray *array = @[@”1”,@”2”];
NSMutableArray *mArray = @[@”1”,@”2”,@”3”].mutableCopy;
3⃣ 只有可变数组的下标才能进行赋值
访问数组元素的时候,使用下标进行访问
NSLog(@”%@”,mArray(0));
还可以赋值: mArray(1) = @”222”;
4⃣ 字典的字面量
NSDictionary*dic = @{@”a”:@”2”,@”b”:@”3”};
冒号前的是 key值,冒号后的是 value 值
访问 key 值对应的 value 值
NSLog(@”%@”,dic[@”a”]);
NSMutableDictionary *mdic =@{@”a”:@”2”,@”b”:@”3”}.mutableCopy;
11. 注意:只有字符串,数组,字典有语法糖,集合没有语法糖.
1>主要是实现函数的回调功能(跟 C语言中的函数指针有同等的功效)
2>定义属性接收 block, 必须使用 copy 修饰,. retain 无效,即 retain 和 assign 会造成野指针问题.
3>block 在某个方法中定义时存储在栈区,在另一个类中使用需要进行 copy, 存储在栈区
本文详细介绍了Objective-C中的Block语法,包括Block的数据类型、使用typedef简化Block、Block内部访问变量以及如何对数组进行排序。同时,文章探讨了语法糖Literals在创建NSNumber、NSArray和NSDictionary时的便利性,并指出只有特定类型支持字面量表示法。Block在OC中的重要性体现在其作为函数回调功能以及定义属性时需使用copy修饰。

517

被折叠的 条评论
为什么被折叠?



