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
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的内省(Introspection)用法小结
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- 以实例讲解Objective-C中的KVO与KVC机制
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- vm安装mac os x 10.7 lion
- objective-c(一)
- objective-c(二)
- objective-c(三)
- objective-c(四)-基本数据类型以及循环和选择结构