(转)CFBag

简介: (转)CFBag

前文,看到技术美文,忍不住想拿出来分享.下面是原文地址

点击原文地址

Objective-C被夹在了两个世界中间

在其中一边的世界里,Objective-C遵循着经过深思熟虑的、发扬自[Smalltalk]的面向对象哲学理念,这种理念给我们带来了消息传递和参数命名法等好点子。另一边的世界里则避免不了有很多C的残留思想带来强大的力量和一坨混乱

越来越多@符号的使用证明了这个一致性危机。

Foundation和Core Foundation的关系里也可以发现这种一致性问题,特别是那一堆无缝连接的类: NSArray / CFArray, NSDictionary / CFDictionary, NSSet / CFSet。这些类可以通过C函数和Objective-C方法传入传出而不需要手动转换。这是抽象化设计的缺陷,但是同时也是写应用时最实用的优化最难以优化部分的绝佳手段。

Bag,一种抽象数据类型

在计算机科学领域集合数据类型的殿堂中,bag没有数组、集合、联合数组、树、图、优先队列那么占有一席之地。

其实bag本身就很晦涩,你可能从没听过这东西。

Bag,或者叫做multiset,是set的一种变体,不同的是bag里同一数据可以出现不止一次。集合中每一个唯一元素会有一个合计数字与其绑定。类似set一样,bag也是顺序不敏感的。

用bag的场景有...咳咳...很少,但有如果它出现你肯定能感觉到那就是bag。大选中统计票数?模拟家庭作业中的概率分布?实现一个Yahtzee骰子游戏?Bag都是你的新选择!


使用CFMutableBag

CFBag 和它的可变类型同类 CFMutableBag 作为bag类型的具体实现,都是非常灵活的。

虽然它们没有像 NSCountedSet 那样方便地面向对象化,但它可以进行的自定义行为却是多种多样的。你可以用带有许多回调的初始化函数来建立一个 CFBag ,这些回调函数定义在 CFBagCallBacks 结构中,该结构详细描述了一个值被插入、删除、比较的方法:

struct CFBagCallBacks {

CFIndex version;

CFBagRetainCallBack retain;

CFBagReleaseCallBack release;

CFBagCopyDescriptionCallBack copyDescription;

CFBagEqualCallBack equal;

CFBagHashCallBack hash;

};

typedef struct CFBagCallBacks CFBagCallBacks;

retain: 当一个值被添加到集合里时用于retain它的回调

release: 当一个值被从集合里删除时用于release它的回调

copyDescription: 用于集合中每个值建立一个string类型的description的回调

equal: 用于比较集合中两个值是否相等的回调

hash: 集合中用于计算值的Hash的回调

例如,如果你正在做一个投票统计应用,你可以制定一个用于 retain 回调函数来保证不同大小写和错误拼写的名字能够归类到正确的候选人;也可以用 equal 回调函数来保证当所有选票都统计完时能够计算出票最多的候选人。

CFMutableBag 也有 CFBagApplyFunction,这个函数可以用来改变集合中的值,比如说理顺选举数量之类的。

总而言之,如果你要准备搞一个选举, CFBag 是你的最佳选择。

严肃地讲, CFBag 在它擅长的领域内确实好用,它时刻提醒着你这是标准框架和标准库中的一块隐藏的宝石,而发觉隐藏的宝藏,就是成为一个NSHipster的核心。

同样的,CFBinaryHeap 呢? NSPointerFunctions 呢? NSMapTable 呢?有心想学,善用搜索引擎!


相关文章
|
前端开发 JavaScript API
React组件库设计 | 关于我一边写Concis一边给字节组件库arco design提pr的分享
看过我最近的一些文章的小伙伴应该都知道,博主最近半年时间一直在写自己的React组件库Concis,其实这也是从造轮子 -> 学习的目的去做这件事的。
150 1
React组件库设计 | 关于我一边写Concis一边给字节组件库arco design提pr的分享
|
自然语言处理
|
2天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
|
9天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践

热门文章

最新文章