原创Blog,转载请注明出处
http://blog.csdn.net/hello_hwc?viewmode=list
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:Tableview可以加载很多数据,但是却不会引起内存问题,因为在加载Cell的时候,我们使用了这个方法 dequeueReusableCell......
,这个方法就是使用了Cell的复用。同理,如果我们要实现自己的View加载很多东西的时候,View复用也是十分必要的,例如用ScrollView加载很多东西,如果不断的创建新的View,毫无疑问最后内存会不够用。
如何实现View复用?
我自己有三条规则
- 建立两个NSSet,一个代表复用池,一个代表可视池。
- 每当需要新的View时候,先检查复用池里有没有,如果有,则取出,没有则创建新的。
- 监听用户可视范围,需要新的View则按照2中的规则来得到一个新的View,如果一个View不可见了,则放到复用池里
一个简单的例子-访问相册
效果
先实现规则1
为了实现规则1,需要声明两个NSSet,当然我们也需要一个Scrollview和一个数据源
@property (strong,nonatomic)UIScrollView * containScrollView;
@property (strong,nonatomic)NSMutableArray * assetsArray;
@property (strong,nonatomic)NSMutableSet * dequePool;//复用池
@property (strong,nonatomic)NSMutableSet * visiablePool;//可见池
并且对其初始化
-(void)commonInit{
self.dequePool