OC 基础之----- Block和语法糖

本文详细介绍了Objective-C中的Block语法,包括Block的数据类型、使用typedef简化Block、Block内部访问变量以及如何对数组进行排序。同时,文章探讨了语法糖Literals在创建NSNumber、NSArray和NSDictionary时的便利性,并指出只有特定类型支持字面量表示法。Block在OC中的重要性体现在其作为函数回调功能以及定义属性时需使用copy修饰。

本文只是对 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.  注意:只有字符串,数组,字典有语法糖,集合没有语法糖.


Block 高级知的简单介绍

1>主要是实现函数的回调功能(跟 C语言中的函数指针有同等的功效)

2>定义属性接收 block, 必须使用 copy 修饰,. retain 无效,即 retain 和 assign 会造成野指针问题.

3>block 在某个方法中定义时存储在栈区,在另一个类中使用需要进行 copy, 存储在栈区



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值