老师的
@interface ViewController ()<UITableViewDelegate, UITableViewDataSource>
//数据源数组
@property (nonatomic, strong)NSMutableArray *dataArray;
@end
@implementation ViewController
//一般使用懒加载来获取数据源
//在OC里面一般是重新实现getter方法
- (NSMutableArray *)dataArray {
//if (self.dataArray == nil)写法是错误的
if (_dataArray == nil) {
//self.dataArray = [NSMutableArray array];写法是正确的
_dataArray = [NSMutableArray array];
//读文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"news" ofType:@"plist"];
NSArray *array = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in array) {
//创建对象
News *model = [[News alloc] init];
[model setValuesForKeysWithDictionary:dict];
//[self.dataArray addObject:model];写法正确,因为有值了之后不再走if语句
[_dataArray addObject:model];
}
// for (News *n in _dataArray) {
// NSLog(@"%@", n.title);
// }
}
//return self.dataArray;写法是错误的
return _dataArray;
}
#pragma mark - UITableView代理
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
/**
self.dataArray和_dataArray
区别:
self.dataArray会调用getter方法
两个在大部分情况下是等价的,有时候需要区分
*/
//return _dataArray.count;写法是错误的
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//1.重用标志
static NSString *cellId = @"cellId";
//2.获取可重用的cell
NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
//3.获取不到,创建新的cell
if (nil == cell) {
cell = [[NewsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
//4.显示数据
//News *model = _dataArray[indexPath.row];写法是正确的,因为数组已经初始化了
News *model = self.dataArray[indexPath.row];
cell.model = model;
return cell;
}
===========================================================================
我的
@property (nonatomic, strong) NSMutableArray *dataArray;
@end
@implementation ViewController
- (NSMutableArray *) dataArray {
// if (self.dataArray == nil ){
//错误的, 死循环, get 方法,自己调自己
if (_dataArray == nil ){
//set方法
_dataArray = [NSMutableArray array];
// _dataArray = [NSMutableArray array];
// 没区别,调用 set 方法。
NSString *path = [[NSBundle mainBundle] pathForResource:@"news" ofType:@"plist" ];
NSArray *array = [NSArray arrayWithContentsOfFile:path];
for (NSDictionary *dict in array){
News *model = [[News alloc] init];
[model setValuesForKeysWithDictionary:dict];
[_dataArray addObject: model];
// [self.dataArray addObject: model];
//get 方法, 对的, if判定 ,不走了
}
}
// return _dataArray;
return self.dataArray;
// 调用 set 方法,错的。虽然不走 if ,但走``````
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.dataArray.count;// 会调用 get 方法
// return _dataArray; 是不可以的, 不会 调用 get方法。
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellId = @"cellId";
NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if (nil == cell ){
cell = [[NewsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
}
News *model = self.dataArray[indexPath.row];
cell.model = model;
return cell;
}