老师在讲Foundation中的NSArray的遍历时,以下代码有问题。
首先这是NSArray * array = @[@"Jack",@"Rose"];
这是在调用系统体提供的对象函数遍历
[array enumerateObjectsUsingBlock:^(id obj,NSUInteger idx,BooL *stop)
{
NSLog(@"%ld - %@",idx,obj);
}
-------0-------if(idx == 0)
break;
];
以下是老师在讲述上述代码的原理:
--------1---------void ^(myblock)(id,NSUInteger,BOOL *) = ^(id obj,NSUInteger idx,BOOL * stop){
NSLog(@"%ld -%@",idx,obj);
------0-------if(idx == 0)
*stop =YES;
};
for(int i = 0;i < array.count;i++){
BOOL isStop = NO;
id obj = array[i];
myblock(obj,i,isStop);
if(isStop)
break;
}
首先,void ^(myblock)(id,NSUInteger,BOOL *)中的^应该在()里面,老师写错了,却视频中却没报错,我找了半天才找出来。
其次,就是老师在讲解对象方法的原理时都是在他自己的假设“i==0时就停止打印下”讲解的。如果没有这个假设,那stop的值应该在i=array.count时变成YES,但是在Block中根本就无法使用array这个数组,除非再用一个形参传递数组长度。
OC初学者,也可能是我自己想的不到位,求牛人解释。 |