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