延展类别又称为扩展(Extendsion),Extension是Category的一个特例
可以为某个类扩充一些私有的成员变量和方法
@interface 类名 ()
@end
Block是iOS中一种比较特殊的数据类型
Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛
Block的作用
返回值类型 (^block变量名)(形参列表) = ^(形参列表) {
};
void (^block名)() = ^{代码块;}
例如:
void (^myBlock)() = ^{ NSLog(@"李南江"); };
void (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }
例如:
void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
返回类型 (^block名称)(参数列表)
= ^ (参数列表) { // 代码实现; }
例如:
int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
block变量名(实参);
int sum(int value1, int value2)
{
return value1 + value2;
}
int minus(int value1, int value2)
{
return value1 - value2;
}
int main(int argc, const char * argv[]) {
int (*sumP) (int, int) = sum;
int res = sumP(10, 20);
NSLog(@"res = %i", res);
int (*minusP) (int , int) = minus;
res = minusP(10, 20);
NSLog(@"res = %i", res);
return 0;
}
typedef int (*calculate) (int, int);
int main(int argc, const char * argv[]) {
calculate sumP = sum;
int res = sumP(10, 20);
NSLog(@"res = %i", res);
calculate minusP = minus;
res = minusP(10, 20);
NSLog(@"res = %i", res);
return 0;
}
block使用 ```objc int main(int argc, const char * argv[]) { int (^sumBlock) (int, int) = ^(int value1, int value2){ return value1 + value2; }; int res = sumBlock(10 , 20); NSLog(@"res = %i", res);
int (^minusBlock) (int, int) = ^(int value1, int value2){ return value1 - value2; }; res = minusBlock(10 , 20); NSLog(@"res = %i", res); return 0; } ```
block别名
int main(int argc, const char * argv[]) {
calculateBlock sumBlock = ^(int value1, int value2){
return value1 + value2;
};
int res = sumBlock(10, 20);
NSLog(@"res = %i", res);
calculateBlock minusBlock = ^(int value1, int value2){
return value1 - value2;
};
res = minusBlock(10, 20);
NSLog(@"res = %i", res);
return 0;
}
int a = 10;
void (^myBlock)() = ^{
NSLog(@"a = %i", a);
}
myBlock();
输出结果: 10
int a = 10;
void (^myBlock)() = ^{
int a = 50;
NSLog(@"a = %i", a);
}
myBlock();
输出结果: 50
int b = 5;
void (^myBlock)() = ^{
b = 20; // 报错
NSLog(@"b = %i", b);
};
myBlock();
objc __block int b = 5; void (^myBlock)() = ^{ b = 20; NSLog(@"b = %i", b); }; myBlock(); 输出结果: 20
原文:http://www.cnblogs.com/zhoudaquan/p/5017488.html