思想
用两个NSDictionary
分别记录对象的标识符与其类对象的关联和标识符与可用对象队列的关联。这样就可以使用标识符来从对象复用池里获取对象以及回收对象了。
根据标识符从对象复用池里获取对象时,首先查看标识符对应的可用对象队列中是否还有可用的对象。如果没有,就根据标识符找到对象的类对象并使用类对象创建一个对象然后返回,如果有就从队列中取出并返回。
根据标识符回收对象时,首先要根据标识符获取对应的可用对象队列,如果能获取到队列,就把对象加入到队列中,如果获取不到,就抛出异常。
当然,在使用对象复用池之前还需要一一注册类对象以及标识符,以建立标识符和类对象以及标识符和可用对象序列的关联。
此后,通过扩展或集成这个类,就可以实现更有用的功能。比如说UIScrollView
中View
的复用。
代码
下面是实现的代码:
SSPClassesReusePool.h
#import <Foundation/Foundation.h>
@protocol SSPClassesReusePoolProtocal <NSObject>
@required
/**
* 注册类欲使用复用池的实例。
*
* @param cls 实例的类对象。
* @param identifer 实例的标识符。
*/
- (void)registerClass:(Class)cls forIdentifer:(NSString *)identifer;
/**
* 获取对象实例。
*
* @param identifer 注册时使用的标识符。
*
* @return 对象实例。
*/
- (id)classForIdentifer:(NSString *)identifer;