您的位置:首页 > 移动开发 > Objective-C

Objective-C入门20:Block

2015-09-23 15:33 567 查看
Objective-C入门20:Block

main.m
#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {

// Block :闭包 又叫 代码 块 可以当做参数传递
// Block :也算是一个函数

// Block(闭包)就是能够读取其他函数内部变量的函数
// Block 可以访问 修改 内部变量

// 使用 Block的好处 : 可以组织独立的代码段 提高代码的复用性 可读性
// Block 重要特点 : 常用于一个操作完成后的回调

// block 公式 声明 和 实现

// 1、无返回值的Block 公式

// 2 、无返回值的Block 公式
// void ( ^block的名字 )(形参列表);
// block的名字 = ^(形参列表)
// {
// 具体实现代码
// } ;

// 有返回值的 Block 的公式
// 返回值类型(^block的名字)(形参列表) =^(形参列表)
// {
// return 返回值类型的一个参数 ;
// } ;

#pragma mark---------------无返回值的Block 练习--------------------------------
void ( ^miao )() = ^()
{
NSLog( @"喵~" ) ;
} ;
// Block 的调用
// block的名字(实参)
miao( ) ;

void ( ^wahaha )();
wahaha = ^()
{
NSLog(@"水~");
} ;
wahaha();

void( ^wangwang )( NSString *message ) = ^( NSString *message )
{
NSLog(@"%@" , message ) ;
} ;
wangwang(@"变身狗妖");

void ( ^miaomiao )(NSString *message1);
miaomiao = ^(NSString *message1 )
{
NSLog(@"%@" , message1 ) ;
} ;
miaomiao(@"变身猫妖" );

// 可以访问到另一个 方法(函数) 内部的临时变量
// 不仅可以访问 还可以 修改(__block)
__block int v = 10 ;
void(^sum)(int a , int b ) = ^(int a , int b )
{
v = a+b ;
NSLog(@"%d" , v ) ;
} ;
sum ( 100,101 ) ;

__block int k = 10 ;
void ( ^sum1)( int a , int b );
sum1 = ^(int a , int b)
{
k=a+b;
NSLog(@"%d" ,k ) ;
} ;
sum1(20,5);

__block NSString * aa = @"asffs" ;
void( ^zf )( NSString *bb ) = ^( NSString *bb )
{

NSString *aabb = [ aa stringByAppendingString : bb ] ;
NSArray *all = @[ aabb ] ;
NSLog( @"%@" , all ) ;
} ;
zf( @"是色鬼" );
__block NSString * cc = @"tgar" ;
void ( ^zfc )(NSString *bb) ;
zfc = ^( NSString *bb )
{
NSString *ccbb = [ cc stringByAppendingString : bb ] ;
NSArray *all = @[ ccbb ];
NSLog(@"%@" , all ) ;
} ;
zfc( @"是流氓" );

int (^summ)( int a,int b ) =^( int a,int b )
{
return a+b ;
} ;
NSLog( @"%d" , summ ( 1 , 50 )*25 ) ;

NSMutableDictionary *dic = [ NSMutableDictionary dictionary ] ;
NSDictionary * (^add)() = ^()
{
[ dic setObject:@"wgfgfw" forKey:@"name" ] ;
NSDictionary *d =[ dic copy ] ;
return d ;
} ;
NSLog(@"%@",add());

NSString* (^leirong)(NSString *s) ;
leirong = ^(NSString *s)
{
NSString * bb = [NSString stringWithFormat: @"他说:%@ " , s ];
return bb ;
} ;
leirong ( @"你真帅" );
NSLog(@"%@" , leirong ( @"你真帅" ) );

Person *p = [ [ Person alloc ] init ] ;
[ p aaaa ] ;

}
return 0;
}


Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

- (void)aaaa ;

@end

Person.m

#import "Person.h"
@implementation Person

//block  回调函数
//  带有 block 参数的函数公式
//void 的地方 可以是其他返回值类型
//  - ( 返回值类型 ) 函数名 : (void(^)(参数列表))block 名字
//    {
//    block 名字(实参);
//    }

- (void)aaaa
{
[ self message:^(NSString *m)
{
NSLog(@"%@",m);
} ] ;

[ self area:^int(int w, int h) {
return w*h ;
} ] ;
}
- ( void ) message : (void(^)(NSString *m ))block
{
block(@"世界原来如此美好") ;
}

// 计算并输出 矩形的面积的方法
- (void)area: (int (^)(int w,int h))block
{
NSLog(@"矩形的面积:%d" , block(15,30) ) ;
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c