@property (nonatomic, strong) NSArray *heros;
(NSArray *)heros
{
if (_heros == nil) {
// 初始化
// 1.获得 plist 的全路径
NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil];
// 2.加载数组
NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
// 3.将 dictArray 里面的所有字典转成模型对象,放到新的数组中
NSMutableArray *heroArray = [NSMutableArray array];
for (NSDictionary *dict in dictArray) {
// 3.1.创建模型对象
MJHero *hero = [MJHero heroWithDict:dict];
NSLog(@"%@",hero);
// 3.2.添加模型对象到数组中
[heroArray addObject:hero];
}
// 4.赋值
_heros = heroArray;
}
return _heros;
}
代码如上,为什么没有调用 heros 却能获得 renturn 的对象? iOS 新手衷心求指教,想了好久都没想到是为什么,怀疑我自己是不是知识点缺失了。。。
1
czwen1993 2015-11-24 00:29:55 +08:00
你没有调用 heros 又怎么知道能获得 retrun 的对象?
|
2
pupboss 2015-11-24 00:43:43 +08:00 via iPhone
一看注释就猜是明杰的代码,往下一看还真是他的
|
3
pupboss 2015-11-24 00:44:52 +08:00 via iPhone
很明显懒加载嘛
|
4
loveuqian 2015-11-24 00:52:03 +08:00
你在自己代码搜索一下 self.heros 有没有出现在哪个等号的左边
有的话,就是在那个地方调用了你重写的这个 get 方法 另外那个 if 判断,现在都写成 if (!_heros) 因为一不小心你的 = 号少写一个。。就废了 就算你要写 == 也要写在左边,就好像 if (0 == number) |
5
LINAICAI 2015-11-24 01:15:16 +08:00
草 你这个数组成员默认的 getter 就是 heros ,你换个方法名就好了。
|
7
HancockXu 2015-11-24 07:53:11 +08:00
楼上正解, heros 变量的 getter 方法也叫 heros ,你只要访问这个变量就会去调 getter 方法。
|
8
Maxbee OP 先感谢你,有,但是是在重写的 heros 里,这样也能调用?
|
13
Maxbee OP @loveuqian 再问一个问题,这个问题还是有点模糊。在 ViewContorller 里面方法里用_age = xx 这种方法设置的属性,属于哪个对象的?
|
14
Keita1314 2015-11-24 09:19:11 +08:00
@Maxbee _age 是实例变量,当前对象的,@property age 只是属性,只不过 @synthesize age = _age 了,所以可以直接用属性来代表获得和设置实例变量,建议看看实例变量与属性相关知识
|
15
loveuqian 2015-11-24 09:21:37 +08:00
|
17
zhangliang5 2015-11-25 16:07:54 +08:00
@Maxbee gggg
|