IOS开发(57)之构建 Block Objects

1 前言

Block Objects 的对象可以内联或编码为独立的代码块。 今天我们就来介绍一下其用法。

2 代码实例

今天我们不用IOS框架来开发,直接用简单的程序来开发,下面来介绍一下如何用Xcode建立一个简单的程序

2.1 新建项目


2.2 选择Type为Foundation


2.3 新建一个类,在里面添加需要调用的相应方法


TestBlockObject.h

#import <Foundation/Foundation.h>

@interface TestBlockObject : NSObject

//正常方法
- (NSInteger) subtract:(NSInteger)paramValue from:(NSInteger)paramFrom;
//调用Block Object
- (void) callIntToString;

- (void) doTheConversion;

- (void) doTheConversionExt;

- (void) doTheConversionExt2;
@end

TestBlockObject.m

#import "TestBlockObject.h"

@implementation TestBlockObject

- (NSInteger) subtract:(NSInteger)paramValue from:(NSInteger)paramFrom{
    return paramFrom - paramValue;
}

//Block Object
NSString* (^intToString)(NSUInteger) = ^(NSUInteger paramInteger){
    NSString *result = [NSString stringWithFormat:@"%lu",(unsigned long)paramInteger];
    return result;
};
- (void) callIntToString{
    NSString *string = intToString(10);
    NSLog(@"string = %@", string);
}
//typedef 这个 intToStringBlock Object 的签名, 这个签名会告诉 编译器我们的 Block Object 会接受什么参数:
//这个 typedef 告诉编译器 Block Objects 接受一个整数参数并且返回一个被 IntToString Converter 命名的标 示符来展现的字符串。
typedef NSString* (^IntToStringConverter)(NSUInteger paramInteger);

- (NSString *) convertIntToString:(NSUInteger)paramInteger
               usingBlockObject:(IntToStringConverter)paramBlockObject
{
    return paramBlockObject(paramInteger);
}

- (void) doTheConversion{
    NSString *result = [self convertIntToString:123 usingBlockObject:intToString];
    NSLog(@"result = %@",result);
}

- (void) doTheConversionExt{
    IntToStringConverter inlineConverter = ^(NSUInteger paramInteger){
        NSString *result = [NSString stringWithFormat:@"%lu",(unsigned long)paramInteger];
        return result;};
    NSString *result = [self convertIntToString:123 usingBlockObject:inlineConverter];
    NSLog(@"result = %@", result);
}
//内联
- (void) doTheConversionExt2{
    NSString *result =
    [self convertIntToString:123 usingBlockObject:^NSString *(NSUInteger paramInteger)
    {
        NSString *result = [NSString stringWithFormat:@"%lu",(unsigned long)paramInteger];
        return result;
    }];
    NSLog(@"result = %@", result);
}

main.m

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

    @autoreleasepool {
        
        TestBlockObject *test = [[TestBlockObject alloc] init];
        NSInteger i = [test subtract:10 from:20];
        NSLog(@"Simple method [test subtract:10 from:20] result is====>%ld",(long)i);
        NSLog(@"callingBlockObject");
        [test callIntToString];
        NSLog(@"usingBlockObject");
        [test doTheConversion];
        NSLog(@"doTheConversionExt=====>");
        [test doTheConversionExt];
        NSLog(@"doTheConversionExt2=====>");
        [test doTheConversionExt2];
        [test release];
        //Block Object
        NSInteger (^subtract)(NSInteger, NSInteger) = ^(NSInteger paramValue, NSInteger paramFrom){ return paramFrom - paramValue;
        };
        NSLog(@"Simple Block Object result is %lu",subtract(10,20));
        
        
        
    }
    return 0;

}

运行后控制台结果

2013-05-09 17:35:45.335 TestBlockObject[1986:303] Simple method [test subtract:10 from:20] result is====>10

2013-05-09 17:35:45.337 TestBlockObject[1986:303] callingBlockObject

2013-05-09 17:35:45.338 TestBlockObject[1986:303] string = 10

2013-05-09 17:35:45.339 TestBlockObject[1986:303] usingBlockObject

2013-05-09 17:35:45.339 TestBlockObject[1986:303] result = 123

2013-05-09 17:35:45.340 TestBlockObject[1986:303] doTheConversionExt=====>

2013-05-09 17:35:45.340 TestBlockObject[1986:303] result = 123

2013-05-09 17:35:45.341 TestBlockObject[1986:303] doTheConversionExt2=====>

2013-05-09 17:35:45.341 TestBlockObject[1986:303] result = 123

2013-05-09 17:35:45.342 TestBlockObject[1986:303] Simple Block Object result is 10

3 结语

以上就是所有内容,希望对大家有所帮助。

Demo下载地址:http://download.csdn.net/detail/u010013695/5349756

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值