NSObject--block


直接以代码形式来讲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 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作为方法的参数


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;

@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);
}

@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;
        }];   
       
       
// 传入一个名字,然后进行拼接,名字 --
       
        [p
myname : @"aa" ]; //
       
        [p
sengStr : @"aa" andblock :^ NSString *( NSString *s) { //
           
return [s stringByAppendingString : @"--" ];
        }];
       
    }
   
return 0 ;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值