В Objective-C мы знаем, что блоки имеют 3 реализации во время выполнения.C++ лямбда-реализация во время выполнения
NSGlobalBlock
- то есть singleton во время выполнения, и создается в случае, если мы не используем значения переменных стека.NSStackBlock
- это не singleton, и он выделяется на стек (не на куче), и создается, когда мы используем некоторые переменные стека.NSMallocBlock
- это выделено на куче, и это используется, когда мы хотим хранить блоки как ivar или свойство какого-либо класса, или где угодно в куче f.e.@property (nonatomic, copy) MyBlockType myBlock;
или когда используетсяBlock_copy()
функция. Это действительно важно, потому что NSMallocBlock сохраняет объекты из контекста, и этот факт может создать некоторые собственные циклы, если мы не будем использовать блоки правильно.
Итак, мой вопрос: «Где я могу найти полное объяснение C Лямбдами ++ выполнения, и как они обрабатываются компилятором Или могли бы вы объяснить, что Есть ли какие-либо конкретные проблемы, связанные с управлением памятью с использованием C++ лямбды?? Где выделены лямбды, на кучу или на стек? "
"и он создается в случае, если мы не изменяем значения переменных стека с помощью модификатора __block." Нет. 'NSGlobalBlock' для блоков, которые не являются * замыканиями *, т. Е. Не захватывают какие-либо локальные переменные из внешней области. «и создается, когда мы используем модификаторы _block для некоторых переменных стека». Нет. Опять же, для любых блоков, которые являются * замыканиями *, т. Е. Используют локальную переменную из внешней области. Он не имеет переменной '__block'. – newacct
@newacct вы правы, NSGlobalBlock просто может использовать статические переменные, спасибо! – BergP