NSObject--block

本文通过示例代码详细介绍了 Objective-C 中 Block 的基本使用方法,包括 Block 的声明、实现与调用,并展示了如何将 Block 作为函数或方法的参数进行传递。

直接以代码形式来讲block 在oc中基本的使用

#import<Foundation/Foundation.h>
intc = 0;

intmain(intargc, const char * argv[]) {
   
@autoreleasepool {
       
//block声明格式:返回值类型(^blaock名字) (形参列表)
       
int (^myFun)();
       
       
//block实现: block 名字= ^(形参列表){};
        myFun =  ^(){
           
NSLog(@"这是一个代码块");
           
return 1;
        };
       
       
//调用:block名称(实参列表),有返回值的block,可以用一个变量进行接收
       int a = myFun();//空括号不能少!!
       
       
NSLog(@"%d",a);
       
       
//有返回值,有形参,声明和实现放一起
       
int (^myBlock)(inta, int b) = ^(inta, 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的声明格式)
voidfun(int(^bsasa)(inta,intb)){
   
int sum = bsasa(3,2);
   
NSLog(@"%d",sum);
}

voidfun1(NSString*(^myBlock)(NSString*s),NSString*s1){
   
NSLog(@"---%@",myBlock(s1));
}

intmain(intargc, const char * argv[]) {
   
@autoreleasepool {
       
       
//当一个block作为函数的参数是,其返回值类型、形参个数及类型要与函数形参格式保持一致
       
int (^myBlock) (intc, int d) = ^(inta, int b){
           
NSLog(@"--%d,%d",a,b);
           
return a-b;
        };
       
       
//函数形参是block,调用时,直接传block的名字就行
       
fun(myBlock);
       
       
//调用的另一种方式:内联
       
//内联block格式:^返回值类型(形参列表){}
       
fun(^int(inta, int b) {
           
           
return a*b;
        });
       
       
       
fun1(^NSString*(NSString*s) {
           
return s;
        },
@"123");
       
    }
   
return 0;
}


block作为方法的参数


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

//使用typedef声明blocktypedef返回值类型 (^名字)(形参列表)
typedefint  (^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 = [namestringByAppendingString:@"+-"];
   
NSLog(@"%@",str);
}

@end

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

#import"Person.h"

int main(int argc, constchar * argv[]) {
   
@autoreleasepool {
   
       
Person *p = [[Personalloc]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 [sstringByAppendingString:@"--"];
        }];
       
    }
   
return0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值