@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 |