//
// main.m
// 1211块练习
//
// Created by jerehedu on 14/12/11.
// Copyright (c) 2014年 jereh. All rights reserved.
//
#import <Foundation/Foundation.h>
int a=10;
int b=12;
int main(int argc, const char * argv[])
{
// int __block c=19;
@autoreleasepool {
//block可以访问局部变量,但是不能修改
//__block 块修改 关键字 不加的话无法在块内对c(局部变量)进行修改
__block int c=19;
void (^nBlock)()=^{
c+=9;
NSLog(@"%i",c);
};
nBlock();
//外部变量可以直接操作、修改
void (^nmBlock)()=^{
NSLog(@"%i",++a);
};
nmBlock();
NSLog(@"%i,%i",a,b);
//block保存一段代码,用花括号括起来
//block标志是^
/*block与函数比较
1.可以保存代码
2.有返回值
3.有形参
4.调用方式和C调用函数一样
*/
//没有参数返回值的块
void (^ myBlock)();
myBlock=^{
NSLog(@"没有参数返回值的块。");
};
//直接写完不会被执行,被保存起来了,需要调用
//块的调用
myBlock();
//写在一起
void(^ myblock)()=^{
NSLog(@"没有参数返回值的块。");
};
myblock();
//可以把块写在main的上面,则整个函数体内直接调用即可
//==========================================================
//有参数返回值的 加法
int (^ addBlock)(int,int) = ^(int a,int b){
return a+b; //此处括号内形参可以省略
};
NSLog(@"有参数返回值的 加法 %i",addBlock(1,2)) ;
//通过block,打印出N条直线,N是调用块时传入
void(^ lineBlock)(int)=^(int N){
for (int i=0; i<N; i++) {
NSLog(@"______________");
}
};
lineBlock(5);
//减法
int (^ subBlock)(int,int)=^(int a,int b){
return a-b;
};
NSLog(@"减法 %i",subBlock(23,12));
//typedef 用MyBlock代替int (^ MyBlock)(int,int)
typedef int (^ MyBlock)(int,int);
//乘法简化 MyBlock是类型,不能直接用来调用block,需要用变量名来调用
MyBlock mulBlock=^(int a,int b){
return a*b;
};
NSLog(@"乘积为: %i",mulBlock(1,2));
//除法
MyBlock divBlock=^(int a,int b){
return a/b;
};
NSLog(@"商为: %i",divBlock(9,3));
}
return 0;
}