67c*_*ies 0 recursion objective-c
当我实现这样的方法时:
-(void)exampleMethod{
[self exampleMethod];
}
Run Code Online (Sandbox Code Playgroud)
然后运行它,我明白了EXE_BAD_ACCESS (code=2, address=0x7fff5f3ffff8).
当我在方法中调用方法或函数时,它会在崩溃之前调用自己更长的时间.
这是一个例子:
-(void)exampleMethod{
NSLog(@"Example Was Run");
[self exampleMethod];
}
Run Code Online (Sandbox Code Playgroud)
运行时会发生什么逻辑导致此行为?
它会在任何一种方式上自我调用.这是一个无限递归,它在像Objective-C这样的语言中最终会导致你耗尽堆栈空间并崩溃.不同之处在于带有print语句的版本要慢得多(因为与调用函数相比,打印速度非常慢),因此在打击堆栈之前需要花费更长的时间.(也就是说,通过挂钟测量需要更多的时间,而不是它将获得更多的迭代.每次迭代都比较慢,因此需要更长的时间才能达到杀死程序的迭代次数.)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |