一,UITableView用于显示列表,可以选择、删除、重排列;
二,UITableView需要实现UITableViewDataSource和UITableViewDelegate接口的辅助类,这些在UITableViewController都实现了。
三,创建UITableViewController实例,会在它的loadView中创建UITableView
四,BNRItemStore model
1,使用单实例的方式创建BNRItemStore对象
2,在方法中直接创建static对象,这样对象就无法被回收
static BNRItemStore *sharedStore = nil;
3,数据对内开放,对外封闭
@property (nonatomic, readonly) NSArray *allItems; - (NSArray *)allItems { <span style="white-space:pre"> </span>return self.privateItems; //覆盖了get方法 虽然这样,但是ios中返回类型无法修改返回对象的类型,也就是说外部仍旧可以操作这个对象; 可以使用array的copy来返回一个immutable对象 } @property (nonatomic) NSMutableArray *privateItems; - (instancetype)initPrivate { self = [super init]; if (self) { _privateItems = [[NSMutableArray alloc] init]; //内容可以修改内容 } return self; }
五,UITableViewDataSource
1,UITableView显示时,至少需要向它的dataSource请求tableView:numberOfRowsInSection: and tableView:cellForRowAtIndexPath:.
2,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [[[BNRItemStore sharedStore] allItems] count];
//section用于分块,比如可以根据名字字母进行分块 }
六,UITableViewCells
1,adapter,返回item的view
2,默认的cell已经提供了布局,你可以根据需求选择想要的布局
3,使用dataSource的tableView:cellForRowAtIndexPath:来返回cell
七,重用cell
1,需要重用cell,避免内存崩溃
2,有一个cell池,缓存cell
3,如果有多种类型的cell,有可能出现获得错误类型的cell,避免的方法是在为cell设置类型;
<span style="font-family: Arial, Helvetica, sans-serif;">- (UITableViewCell *)tableView:(UITableView *)tableView</span>
cellForRowAtIndexPath:(NSIndexPath *)indexPath {<pre name="code" class="objc">// Get a new or recycled cellUITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"forIndexPath:indexPath];NSArray *items = [[BNRItemStore sharedStore] allItems];BNRItem *item = items[indexPath.row];cell.textLabel.text = [item description];return cell;}
4,在TableViewController的viewDidLoad中,向tableview注册cell
- (void)viewDidLoad { [super viewDidLoad]; [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"]; }