码迷,mamicode.com
首页 > 移动开发 > 详细

猫猫学iOS 之BLOCK的妙用_利用block实现链式编程

时间:2015-09-22 01:28:16      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:ios   对象   博客   代码   编程   

猫猫分享,必须精品

原创文章,欢迎转载。转载请注明:翟乃玉的博客
地址:http://blog.csdn.net/u013357243

一:场景

我们有个对象人,他有两个方法,一个是学习study,一个是跑步run,
这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下:
调用:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
    //初始化人
        Person *p = [[Person alloc] init];
        //调用
        [[p study] run];
    return 0;
}

人对象:


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

@interface Person : NSObject
- (Person *)study;
- (Person *)run;
@end

// Person.m
#import "Person.h"

@implementation Person
- (Person *)study
{
    NSLog(@"study----");

    return self;
}

- (Person *)run
{
    NSLog(@"run----");
    return self;
}

@end

运行结果
技术分享

二:block链式结构实现

调用:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        Person *p = [[Person alloc] init];

        p.study(@"xx宝典").run().study(@"xx剪发");
    }
    return 0;
}

人对象:

//Person.h
@interface Person : NSObject


- (Person *(^)(NSString *name))study;
- (Person *(^)())run;
@end
//Person.m
@implementation Person

- (Person *(^)(NSString *))study
{
    return ^(NSString *name){
        NSLog(@"study----%@", name);
        return self;
    };
}

- (Person *(^)())run
{
    return ^{
        NSLog(@"run----");
        return self;
    };
}
@end

在这里面,我们

p.study(@”xx宝典”).run().study(@”xx剪发”);
调用study方法:p.study
执行block:p.study(@”xx宝典”)
结合person内部写的方法

- (Person *(^)(NSString *))study
{
    return ^(NSString *name){
        NSLog(@"study----%@", name);
        return self;
    };
}

明显可以看到,当执行p.study(@”xx宝典”)时候,内部是return一个返回值是person*类型(最后的return self)的block 这也就解释了为什么下一句可以继续连着用点来调用了。也就是说返回的是一段block,这段block里面又有返回值,返回值是person的对象self。
这里的参数有点晕,记住就好,用链式结构的block的巧妙用法,简单了解就好

执行结果

技术分享

版权声明:本文为博主原创文章,未经博主允许不得转载。

猫猫学iOS 之BLOCK的妙用_利用block实现链式编程

标签:ios   对象   博客   代码   编程   

原文地址:http://blog.csdn.net/u013357243/article/details/48631633

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!