Gavin.han

致力于移动开发 技术改变生活
随笔 - 133, 文章 - 0, 评论 - 46, 阅读 - 42万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

ios 块语法的本质

Posted on   gavin.han  阅读(1436)  评论(0编辑  收藏  举报

块语法的本质是:函数指针

块语法的回调是通过传递函数指针实现的。

贴图贴码为快:

主函数:

复制代码
View Code
#import <Foundation/Foundation.h>
#import "HomeClass.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        HomeClass *home = [[HomeClass alloc] init];
        [home method];
        
    }
    return 0;
}
复制代码

HomeClass类:

复制代码
View Code
#import <Foundation/Foundation.h>

@interface HomeClass : NSObject

- (void)method;

- (void)aactin:(NSString *)string;

@end
复制代码
复制代码
View Code
//
//  HomeClass.m
//  BlockDemo
//
//  Created by hanjun on 13-3-14.
//  Copyright (c) 2013年 CompanyOfHanJun. All rights reserved.
//

#import "HomeClass.h"
#import "ToolClass.h"

@implementation HomeClass

- (void)aactin:(NSString *)string{
    NSLog(@"%@",string);
}

- (void)method{
    ToolClass *tool = [[ToolClass alloc] init];

    [tool handleData:0 numberb:0 Function:^(int a, int b) {
        NSLog(@"%d %d",a,b);
    }];
    
    [tool action:^NSString *(NSString * string) {
        NSLog(@"callBack:%@",string);
        return @"hanjun";
    }];
        
}



@end
复制代码

ToolClass类

复制代码
View Code
#import <Foundation/Foundation.h>

@interface ToolClass : NSObject
-(void)handleData:(int)a numberb:(int)b Function:(void (^)(int a,int b))testFunction;

- (void)presentViewCompletion:(void (^)(void))completion;

- (void)action:(NSString *(^)(NSString *))string;
- (void)aactin:(NSString *)string;
@end
复制代码
复制代码
View Code
//
//  ToolClass.m
//  BlockDemo
//
//  Created by hanjun on 13-3-14.
//  Copyright (c) 2013年 CompanyOfHanJun. All rights reserved.
//

#import "ToolClass.h"

@implementation ToolClass

//块值传参,没有返回值
-(void)handleData:(int)a numberb:(int)b Function:(void (^)(int a,int b))testFunction
{
    int aaa=5,bbb=10;
    
    testFunction(aaa,bbb);
}

//块不仅可以传参,还可以有返回值
- (void)action:(NSString *(^)(NSString *))string
{
    
    NSString * backReturn = string(@"yhy");
    NSLog(@"backReturn = %@",backReturn);
}


int (^oneFrom)(int) = ^(int anInt)
{
    return anInt-1;
};

int (^completion)(int)=^(int a){
    return a;
};

//int (^completion)(int)=^(int a1){
//    return a1+5;
//};

int (^myBlock)(int)=^(int a1){
    return a1;
};

@end
复制代码

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示