一、Block语法介绍
// 1.定义一个Block变量
// 1.1定义一个返回值为void,没有形参
void (^myBlock) (void); // 定义变量
// 给这个变量赋值
myBlock = ^(void)
{
NSLog(@"这是我自己定义的Block的语法");
};
// 使用
myBlock ();
// 1.2 定义一个有返回值的而且带有形参的block
int (^myBlock1) (int,int); // 首先定义
myBlock1 = ^(int a,int b)
{
return a+b;
}; // 后面一定要加分号,因为这是语句
NSLog(@"%d",myBlock1(2,3)); // 调用myBlock1语法
// 1.3 用tydef来定义 其形式为 typedef <#returnType#>(^<#name#>)(<#arguments#>);
newBlock result ; //.定义
result = ^(int a,int b)
{
return a+b;
}; // 封装
NSLog(@"%d",result(5,6)); // 调用
// Block 数据类型的特点
int a = 10;
__block int b = 5;
void (^tryBlock)() = ^{
NSLog(@"a=%d",a); //.1block内部能访问外面的的局部变量
b = 6; // 如果要修改外面的局部变量,外部的变量要用__block修饰
NSLog(@"b=%d",b);
};
tryBlock() ;
二、Category与Extension
1.Category主要是用来为类增加方法而使用的,能访问类的成员变量,但不能增加很修改成员变量,当Catagory的方法与类的方法重名时,Catagory的优先级别高于类。
2.Extension主要是增加类的成员变量和方法,并且让其转为私有。