直接以代码形式来讲block 在oc中基本的使用
#import
<Foundation/Foundation.h>
int c = 0 ;
int main( int argc, const char * argv[]) {
@autoreleasepool {
//block 声明格式:返回值类型 (^blaock 名字 ) ( 形参列表 )
int (^myFun)();
//block 实现 : block 名字 = ^( 形参列表 ){};
myFun = ^(){
NSLog ( @" 这是一个代码块 " );
return 1 ;
};
// 调用 :block 名称 ( 实参列表 ), 有返回值的 block ,可以用一个变量进行接收
int c = 0 ;
int main( int argc, const char * argv[]) {
@autoreleasepool {
//block 声明格式:返回值类型 (^blaock 名字 ) ( 形参列表 )
int (^myFun)();
//block 实现 : block 名字 = ^( 形参列表 ){};
myFun = ^(){
NSLog ( @" 这是一个代码块 " );
return 1 ;
};
// 调用 :block 名称 ( 实参列表 ), 有返回值的 block ,可以用一个变量进行接收
int a = myFun();
//空括号不能少!!
NSLog ( @"%d" ,a);
// 有返回值,有形参,声明和实现放一起
int (^myBlock)( int a, int b) = ^( int a, int b){
return 1 +b;
};
// 调用
int sum = myBlock( 10 , 20 );
NSLog ( @"%d" ,sum);
// 返回值类型是字符串 NSString *(^ 名字 )( 形参列表 )
NSString *(^myBlock1) ( NSString *s) = ^( NSString *s){
NSLog ( @" 字符串 :%@" ,s);
return s;
};
myBlock1( @"123" );
// 有一个局部变量,要在 block 进行值的改变
__block int b = 0 ;
void (^myBlock2)() = ^(){
b++;
};
// 有一个全局变量,在 block 进行值的改变
void (^myBlock3)() = ^(){
c ++;
};
}
return 0 ;
}
block 作为函数参数
block作为形参使用,在函数中使用block
方法运算数据
#import
<Foundation/Foundation.h>
//block 作为函数的参数
// 函数返回值类型 函数名 (block 的声明格式 )
void fun( int (^bsasa)( int a, int b)){
int sum = bsasa( 3 , 2 );
NSLog ( @"%d" ,sum);
}
void fun1( NSString *(^myBlock)( NSString *s), NSString *s1){
NSLog ( @"---%@" ,myBlock(s1));
}
int main( int argc, const char * argv[]) {
@autoreleasepool {
// 当一个 block 作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) ( int c, int d) = ^( int a, int b){
NSLog ( @"--%d,%d" ,a,b);
return a-b;
};
// 函数形参是 block ,调用时,直接传 block 的名字就行
fun (myBlock);
// 调用的另一种方式:内联
// 内联 block 格式: ^ 返回值类型 ( 形参列表 ){}
fun (^ int ( int a, int b) {
return a*b;
});
fun1 (^ NSString *( NSString *s) {
return s;
}, @"123" );
}
return 0 ;
//block 作为函数的参数
// 函数返回值类型 函数名 (block 的声明格式 )
void fun( int (^bsasa)( int a, int b)){
int sum = bsasa( 3 , 2 );
NSLog ( @"%d" ,sum);
}
void fun1( NSString *(^myBlock)( NSString *s), NSString *s1){
NSLog ( @"---%@" ,myBlock(s1));
}
int main( int argc, const char * argv[]) {
@autoreleasepool {
// 当一个 block 作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
int (^myBlock) ( int c, int d) = ^( int a, int b){
NSLog ( @"--%d,%d" ,a,b);
return a-b;
};
// 函数形参是 block ,调用时,直接传 block 的名字就行
fun (myBlock);
// 调用的另一种方式:内联
// 内联 block 格式: ^ 返回值类型 ( 形参列表 ){}
fun (^ int ( int a, int b) {
return a*b;
});
fun1 (^ NSString *( NSString *s) {
return s;
}, @"123" );
}
return 0 ;
}
block作为方法的参数
Person.h
#import
<Foundation/Foundation.h>
// 使用 typedef 声明 block : typedef 返回值类型 (^ 名字 )( 形参列表 )
typedef int (^myblockType)( int a);
@interface Person : NSObject
//block 作为方法的参数:(返回值类型 (^)( 形参列表 ) )参数名 (blcok 名字 )
-( void )myblock:( int (^)( int a))block;
-( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1;
-( void )useblockType:( myblockType )sss;
-( void )myname:( NSString *)name;
// 使用 typedef 声明 block : typedef 返回值类型 (^ 名字 )( 形参列表 )
typedef int (^myblockType)( int a);
@interface Person : NSObject
//block 作为方法的参数:(返回值类型 (^)( 形参列表 ) )参数名 (blcok 名字 )
-( void )myblock:( int (^)( int a))block;
-( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1;
-( void )useblockType:( myblockType )sss;
-( void )myname:( NSString *)name;
@end
Person.m
#import
"Person.h"
@implementation Person
-( void )myblock:( int (^)( int ))block{
int a = block( 10 );
NSLog ( @"%d" ,a);
}
-( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1{
myblock1(name);
}
-( void )useblockType:( myblockType )sss{
int res = sss( 10 );
NSLog ( @"---%d" ,res);
}
-( void )myname:( NSString *)name{
NSString *str = [name stringByAppendingString : @"+-" ];
NSLog ( @"%@" ,str);
}
@implementation Person
-( void )myblock:( int (^)( int ))block{
int a = block( 10 );
NSLog ( @"%d" ,a);
}
-( void )sengStr:( NSString *)name andblock:( NSString *(^)( NSString *))myblock1{
myblock1(name);
}
-( void )useblockType:( myblockType )sss{
int res = sss( 10 );
NSLog ( @"---%d" ,res);
}
-( void )myname:( NSString *)name{
NSString *str = [name stringByAppendingString : @"+-" ];
NSLog ( @"%@" ,str);
}
@end
main.m
#import
<Foundation/Foundation.h>
#import "Person.h"
int main( int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[ Person alloc ] init ];
[p sengStr : @" 尚德 " andblock :^ NSString *( NSString *s) {
NSLog ( @" 我在: %@" ,s);
return s;
}]; // 内联形式直接实现 block 、
[p useblockType :^ int ( int a) { //typedef 声明
return a;
#import "Person.h"
int main( int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[ Person alloc ] init ];
[p sengStr : @" 尚德 " andblock :^ NSString *( NSString *s) {
NSLog ( @" 我在: %@" ,s);
return s;
}]; // 内联形式直接实现 block 、
[p useblockType :^ int ( int a) { //typedef 声明
return a;
}];
// 传入一个名字,然后进行拼接,名字 -- ;
[p myname : @"aa" ]; //
[p sengStr : @"aa" andblock :^ NSString *( NSString *s) { //
return [s stringByAppendingString : @"--" ];
}];
}
return 0 ;
}