Вам нужно только __block
, если вы изменяете значение переменной.
т.е. если у вас есть:
NSArray* foo;
Вам нужно только __block
, если вы измените значение foo
. Имейте в виду, что foo
- это не что иное, как «указатель на вещь, набранную NSArray
». То есть foo
- это 64-битное или 32-битное целое число, в зависимости от платформы. Если вы измените это целое число, вам нужно __block
. Если нет, вам не нужно __block
.
Итак, нет, вам не нужно __block
для вызова addObject:
в массиве, поскольку вы фактически не меняете значение foo
.
Если бы вы делали что-то вроде foo = (expression);
, тогда вам понадобилось бы __block
.
(обратите внимание, что это одна из причин, по которой параллельное программирование в ОО так чертовски сложно ... исключительно трудно определить «область дисперсии» для любого заданного пути выполнения)