Хорошо, я провел небольшое исследование, теперь все стало более ясно. во-первых, я не использовал @property в блоке 1, что означает, что когда я его устанавливаю, ничего не копируется, поэтому они не сохраняются, во-вторых, если мы делаем [блочное копирование], переменные будут сохранены, если мы не скопируем , блок указывает на адрес стека, скопируйте его в кучу, чтобы сделать его безопасным.
переменная 'массив' является переменной-членом, поэтому она не сохраняется, а между тем сам будет сохранен, независимо от того, поместите ли вы его в блок или нет, если переменная является локальной переменной, она будет сохранена. (это то, что меня все еще смущает, почему переменная-член не сохраняется, вместо этого добавляется еще одна при сохранении счетчика ??? Пожалуйста, ответьте мне?)
после использования блока мы можем установить его равным nil self.block = nil; чтобы освободить переменные и избежать цикла сохранения.
PS. метод прерывания цикла сохранения — использование __block id weakSelf = self; в блоке, значит переменные __block тоже не сохраняются.
person
nickyu
schedule
16.08.2013