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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周易 中级黑马   /  2014-8-12 22:18  /  4002 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看了视频中所讲了,但还不是很理解这个死循环,为什么输出,永远都是 用了test方法而不停止。求指点
#import <Foundation/Foundation.h>
@inteface Person : NSObject
-(void)test;
@end
@implementation Person
-(void)test;
{
        NSLog(@"用了test方法");
        [self test];
}
@end
int main()
{
        Person *p = [Person new];
        [p test];
        return 0;
}

6 个回复

倒序浏览
因为[p test]就是调用test方法,之后来到
-(void)test;   //这里不应该有分号
{
        NSLog(@"用了test方法");  // 输出结果

        [self test];   //这句有相当于当前对象(person对象)又调用test方法,又回到了test方法的入口,反反复复

}
回复 使用道具 举报
  1. [self test];
复制代码

死循环的原因在这里,一旦调用了test方法后,就不断的调用test,有点递归的味道。只是没有判断语句。
回复 使用道具 举报
     执行  [p test];  会有以下动作 ——>
     {NSLog(@"用了test方法"); [p test]; }   ——>
     {NSLog(@"用了test方法");NSLog(@"用了test方法"); [p test];}  ——>
     {NSLog(@"用了test方法");NSLog(@"用了test方法");NSLog(@"用了test方法"); [p test];}  ——>
     {NSLog(@"用了test方法");NSLog(@"用了test方法");NSLog(@"用了test方法"); ......  [p test];}   ——>
     ......
回复 使用道具 举报
[self test]表示调用当前对象的test方法    但是一旦调用test方法     又执行[self test]    就这样不断调用test方法    不断执行[self test]    ……就形成死循环。楼主如果还不明白可以将视频反复看几遍,敲一敲代码
回复 使用道具 举报
本帖最后由 x65396731 于 2014-8-13 11:05 编辑

-(void)test;
{
        NSLog(@"用了test方法");
        [self test];
}

这个是调用当前对象的test函数,然后继续调用当前的test函数。。。。

我的理解是绝对不能在函数或者方法里用self里调用和同名的函数和方法,这样就会出现死循环。
回复 使用道具 举报
既然楼上的几个都说的那么清楚了,我也不再捣鼓了。先执行:NSLog,打印结果,[self test]:调用test方法,执行NSLog,继续打印,调用[self test]方法,执行NSLog ,继续打印,没玩没了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马