При попытке копировать блок он не скопировался. Видимо из-за оптимизации.
Переменные a, j, block, block_copy находятся в стеке.
адрес переменной i отличается от стекового.
Несмотря на копирование block и block_copy содержат указатель на один объект.

При попытке вызвать mutableCopy происходит исключение:
-[__NSMallocBlock__ mutableCopyWithZone:]: unrecognized selector sent to instance 0x6000003a4c30
int a=0;
int j=0;
__block int i=0;
typeblock block = ^(void) {
i+=10+j;
};
typeblock block_copy = [block copy];
block();
block_copy();
Переменные a, j, block, block_copy находятся в стеке.
адрес переменной i отличается от стекового.
Несмотря на копирование block и block_copy содержат указатель на один объект.

При попытке вызвать mutableCopy происходит исключение:
-[__NSMallocBlock__ mutableCopyWithZone:]: unrecognized selector sent to instance 0x6000003a4c30
Интересно, что значение block, где-то рядом с rip
rip: 0x000000010815c6e3 //после вызова block_copy()
block: 0x000000010815c750 (+0x6D)
То есть block находится где-то сразу за после функции, в которой но был создан.
Комментариев нет:
Отправить комментарий