首页 > 代码库 > block的知识点
block的知识点
//
// 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 块改动 keyword 不加的话无法在块内对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;
}
block的知识点