NSThread setStackSize не устанавливает размер потока

Я использую NSThread и установив размер стека для него следующим образом:

thread=[[NSThread alloc]initWithTarget:self selector:@selector(fibnocciForLoop) object:nil];
[thread setStackSize:12];
[thread start];    

Как написано Apple, документы для для -[NSThread setStackSize:]:

обсуждение
Вы должны вызвать этот метод перед запуском вашей темы. Установка размера стека после запуска потока изменяет размер атрибута (который отражается методом stackSize), но это не влияет на фактическое количество страниц, выделенных для потока.

Но когда я проверяю размер стека позже в отладчике, я не получаю значение, которое я установил:

print (int)[thread stackSize]
$1 = 524288

Мой вопрос почему setStackSize: метод существует, если он ничего не делает?

Пожалуйста, дайте мне знать, где я не прав, или API для setStackSize: не имеет никакого смысла?

РЕДАКТИРОВАТЬ: Обратитесь к ответу @Josh Caswell для этого вопроса, я пропустил K в 4K, и, следовательно, приведенный выше код будет работать нормально, как показано ниже:

  thread=[[NSThread alloc]initWithTarget:self
  selector:@selector(fibnocciForLoop) object:nil];
  [thread setStackSize:12*4096];//4K=4096
  [thread start];

ПРОДЛЕНИЕ ЭТОГО ВОПРОСА:

Может кто-то любезно объяснить, почему Apple предоставила этот метод setStackSize, и как и когда использовать этот конкретный метод, потому что пользователю требуется много вычислений для подсчета того, сколько байтов / будет использовано.

Я хочу знать его точное назначение в NSThread?

Спасибо!

2 ответа

Решение

setStackSize: Документация также гласит:

Размер стека для получателя. Это значение должно быть в байтах и ​​кратно 4 КБ.

12 не кратен 4K, поэтому ваш NSThread игнорирует ваш параметр и, вероятно, использует его по умолчанию, который составляет 128 страниц (страница на iOS (и OS X) занимает 4 КБ) или 4 МБ.

Непонятно, что вы хотите, чтобы значило 12, но вам нужно изменить его, чтобы указать не менее 4096 байт, если вы хотите NSThread использовать ваши настройки.

Просто прочитав документацию, на которую вы ссылались, вы пытались вызвать [setStackSize:12] после [start]?

thread=[[NSThread alloc]initWithTarget:self selector:@selector(fibnocciForLoop) object:nil];
[thread start]; 
[thread setStackSize:4096]; // multiple of 4KB

Редактировать: Хорошо, не важно. Я полностью прочитал документацию неправильно. Не делайте этого.

Другие вопросы по тегам