博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重要经验五:block作为属性的注意事项
阅读量:5229 次
发布时间:2019-06-14

本文共 1508 字,大约阅读时间需要 5 分钟。

  现代ios应用的开发。不使用GCD和block,效率会减少非常多,在今年3月份之前,我在block的学习和使用方面,精力和经验都明显不足,在SF有个牛逼同事。不仅自己积累了一套库,并且对这个库持续进行更新和维护,其架构能力和代码水平都不错,他的代码中使用了大量的GCD,为了适应这些技术。我在coding的过程中,開始有意识的多写GCD的代码,刚開始一切顺利。直到我使用block来作为一个对象的属性。这让我纠结了非常久。

  我遇到的问题是:1。这样的属性block,其它类在使用的时候,应该怎么写? 2,block的类型不为void、int,而是对象时,比方NSString*时,又应该怎么办?

  这两个非常easy的问题,让我前后一起纠结了2个多小时。以下,我把我的測试代码上上来。希望对遇到相同问题的人,有所帮助。以下直接上代码了。

头文件例如以下,实现文件里不须要实现不论什么代码。

#import <Foundation/Foundation.h>

typedef int(^compareBlock)(int a, int b);

@interface HBTestBlock : NSObject

@property(nonatomic, copy) compareBlock compare;

@property(nonatomic, copy) UIView *(^viewGetter)(NSString *imageName); //注意其返回类型为UIView *

@end

以下这两个函数,展示的是怎样在其它的类中,使用这两个属性。

#pragma mark 測试对象的属性为block

- (void)testObjPropertyBlock

{

    HBTestBlock *objPropertyBlockObj = [[HBTestBlock alloc] init];

    objPropertyBlockObj.viewGetter = ^(NSString *imageName){

//        return [[UIView alloc] init]; //特别注意此处。若对象不匹配,则会报错,设置为nil也会报错。

        return [self currentView];

    };

    objPropertyBlockObj.viewGetter(@"hello"); //实际运行block

}

- (UIView *)currentView

{

    NSLog(@"now I am in currentView");

    return nil;

}

- (void)testPropertyBlock

{

    HBTestBlock *properBlockObj = [[HBTestBlock alloc] init];

    properBlockObj.compare = ^(int a,int b)

    {

        int result = [self maxer:a another:b];

        NSLog(@"the result is %d",result);

        return result;

    };

    NSLog(@"the properBlockObj.compare is %d",properBlockObj.compare(100,200));

}

- (int)maxer:(int)a another:(int)b

{

    if (a > b) {

        return a;

    }

    return  b;

}

转载于:https://www.cnblogs.com/zsychanpin/p/7110844.html

你可能感兴趣的文章
php实现设计模式之 迭代器模式
查看>>
解决document.location.href下载文件时中文乱码
查看>>
Linux下Nginx+Tomcat整合的安装与配置
查看>>
使用iQuery的getJSON方法实现跨域
查看>>
Windows打开软件老是弹出无法验证发布者
查看>>
MyBatis批量更新
查看>>
[转载]PDO防注入原理分析以及使用PDO的注意事项
查看>>
几道面试题
查看>>
搜索引擎-SHODAN
查看>>
poj_3159_Candies
查看>>
CentOS目录结构
查看>>
网络爬虫基本练习
查看>>
安卓版有道词典的离线词库-《21世纪大英汉词典》等
查看>>
day2
查看>>
TestLink在线Excel用例转换xml
查看>>
winfrom如何在listview中添加控件
查看>>
BZOJ5314 [Jsoi2018]潜入行动 【背包类树形dp】
查看>>
Android应用程序窗口(Activity)与WindowManagerService服务的连接过程分析
查看>>
Android上下左右滑动,显示底层布局
查看>>
php 文件缓存
查看>>