我正在使用NSThread
并为其设置堆栈大小,如下所示:
thread=[[NSThread alloc]initWithTarget:self selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12];
[thread start];
正如为 for 编写的 Apple 文档-[NSThread setStackSize:]
:
讨论
您必须在开始线程之前调用此方法。在线程启动后设置堆栈大小会更改属性大小(由 stackSize 方法反映),但不会影响为线程预留的实际页数。
但是当我稍后在调试器中检查堆栈大小时,我没有得到我设置的值:
print (int)[thread stackSize]
$1 = 524288
setStackSize:
我的问题是,如果该方法什么都不做,为什么还要存在?
请让我知道我错在哪里,或者APIsetStackSize:
是否没有任何用处?
编辑: 关于这个问题,请参阅@Josh Caswell 的回答,我错过了 4K 中的 K ,因此上面的代码可以正常工作,如下所示:
thread=[[NSThread alloc]initWithTarget:self
selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12*4096];//4K=4096
[thread start];
这个问题的扩展:
有人可以解释一下为什么Apple给出了这个方法setStackSize,以及如何以及何时使用这个特定的方法,因为它需要用户进行大量计算才能计算出将使用多少字节。
我想知道它在 NSThread 中的确切用途?
谢谢!