这只是对 Objective-C 方法进行简单缓存(这只是一个对“计算此值一次,缓存它并返回缓存值”的时髦说法)。为 NSObject 添加了一个类别,允许您对任何对象的任何实例上的任何选择器进行缓存。
当您需要多次执行相同的计算密集型操作,但又不想重复计算结果时,缓存非常有用。一个很好的例子是 tableView 行高。在 tableView:heightForRowAtIndexPath:
中计算高度可能很昂贵,所以您只想要计算一次。将计算高度的函数进行缓存意味着高度只会计算一次,后续调用将返回缓存的值。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *text = [[self memoizeAndInvokeSelector:@selector(paragraphsFromString:) withArguments:self.paragraphs, nil] objectAtIndex:(NSUInteger)indexPath.row];
return [[self memoizeAndInvokeSelector:@selector(calculateHeightForText:atIndexPath:) withArguments:text, indexPath, nil] floatValue];
}
注意在这个例子中,我们还将 tableView 的数据源数组的计算进行了缓存,只是为了好玩。
TJLMemoization 使用 cocoapods,所以只需将 pod 'TJLMemoization' 'version'
添加到您的 podfile 中,然后像平常一样安装。然后只需在您想使用它的任何地方使用 #import <TJLMemoization/TJLMemoization.h>
即可。
如果您使用 TJLMemoization 并喜欢它,请随时告诉我,[email protected]。如果您有任何问题或想进行改进,请提交一个 pull request。
MIT 许可协议 (MIT) 版权所有 © 2014 Terry Lewis II
在此协议下,任何人无需支付任何费用即可免费获得本软件及其相关文档副本(以下简称为“软件”),可不受限制地使用软件,包括但不限于以下权利:使用、复制、修改、合并、发布、分发、转授权和/或销售软件的副本,并允许向软件提供方提供软件的人员做上述事情,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是与软件有关的任何明示或暗示的保证,包括但不限于适用性、特定目的和版权的保证。在任何事件中,作者或版权所有者不对以下任何索赔、损害或其他责任承担法律责任:基于合同、侵权或其他原因而产生的事故、损害或其他责任,无论是由于软件或其使用或与其他软件一起使用而产生的,或是由任何原因引起的,包括出于意外或故意。