【发布时间】:2012-06-28 13:47:38
【问题描述】:
我正在使用NSThread 并为其设置堆栈大小,如下所示:
thread=[[NSThread alloc]initWithTarget:self selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12];
[thread start];
为-[NSThread setStackSize:] 编写的 Apple 文档:
讨论
您必须在启动线程之前调用此方法。在线程启动后设置堆栈大小会改变属性大小(由 stackSize 方法反映),但不会影响实际为线程预留的页数。
但是当我稍后在调试器中检查堆栈大小时,我没有得到我设置的值:
print (int)[thread stackSize]
$1 = 524288
我的问题是,如果 setStackSize: 方法什么都不做,为什么它还存在?
请让我知道我哪里错了,或者setStackSize: 的 API 是否没有任何用处?
编辑: 关于这个问题,请参阅@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 中的确切用途?
谢谢!
【问题讨论】:
标签: objective-c cocoa-touch nsthread stack-size