A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

老师在讲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初学者,也可能是我自己想的不到位,求牛人解释。

评分

参与人数 1技术分 +2 黑马币 +4 收起 理由
★彬★卍囧神 + 2 + 4 细心,不错!!

查看全部评分

5 个回复

倒序浏览
你的block中不用关心什么时候到array.count,这个问题由NSArray的其他代码代劳了。这叫模板设计模式,整个程序逻辑的大框架写好了,你只需要填一些空就可以让体系运转起来
回复 使用道具 举报
fantacyleo 发表于 2014-9-19 12:06
你的block中不用关心什么时候到array.count,这个问题由NSArray的其他代码代劳了。这叫模板设计模式,整个 ...

那请问NSArray的其他代码是什么?或者说下怎么样停止的
回复 使用道具 举报
王庆功 发表于 2014-9-19 12:24
那请问NSArray的其他代码是什么?或者说下怎么样停止的

苹果又不开源Foundation框架,我不可能知道具体代码怎么写。但大致的原理不难理解,就是你主帖里贴出来的那段“老师在讲述上述代码的原理”啊
回复 使用道具 举报
我觉得没写错,老师的意思void ^(myblock)(id,NSUInteger,BOOL *) 等于^(id obj,NSUInteger idx,BOOL * stop)
这不是一段代码,他其实是想用来解释后面的*stop为什么需要传地址的,具体怎么做,老实说我也没搞懂,就是弄了个内部循环来实现的,至于里面的完整过程,就像上面说的是Foundation源代码,不可能给你看的。
回复 使用道具 举报
我懂你的意思你的意思是array【0】怎么都会被打印出来,老师这里教的原理,可能没太注意
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马