黑马程序员技术交流社区
标题:
关于OC self 死循环这事
[打印本页]
作者:
周易
时间:
2014-8-12 22:18
标题:
关于OC self 死循环这事
看了视频中所讲了,但还不是很理解这个死循环,为什么输出,永远都是 用了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;
}
作者:
★Joean_Zhou
时间:
2014-8-13 08:44
因为[p test]就是调用test方法,之后来到
-(void)test; //这里不应该有分号
{
NSLog(@"用了test方法"); // 输出结果
[self test]; //这句有相当于当前对象(person对象)又调用test方法,又回到了test方法的入口,反反复复
}
作者:
cjfire
时间:
2014-8-13 09:15
[self test];
复制代码
死循环的原因在这里,一旦调用了test方法后,就不断的调用test,有点递归的味道。只是没有判断语句。
作者:
寇亮
时间:
2014-8-13 09:26
执行 [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];} ——>
......
作者:
fxc
时间:
2014-8-13 09:32
[self test]表示调用当前对象的test方法 但是一旦调用test方法 又执行[self test] 就这样不断调用test方法 不断执行[self test] ……就形成死循环。楼主如果还不明白可以将视频反复看几遍,敲一敲代码
作者:
x65396731
时间:
2014-8-13 11:01
本帖最后由 x65396731 于 2014-8-13 11:05 编辑
-(void)test;
{
NSLog(@"用了test方法");
[self test];
}
这个是调用当前对象的test函数,然后继续调用当前的test函数。。。。
我的理解是绝对不能在函数或者方法里用self里调用和同名的函数和方法,这样就会出现死循环。
作者:
陆习康
时间:
2014-8-13 16:34
既然楼上的几个都说的那么清楚了,我也不再捣鼓了。先执行:NSLog,打印结果,[self test]:调用test方法,执行NSLog,继续打印,调用[self test]方法,执行NSLog ,继续打印,没玩没了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2