ОК. Я провел небольшое исследование, теперь все стало более понятным. во-первых, я не использовал @property для block1, что означает, что когда я его установил, ничего не копируется, поэтому они не сохраняются, во-вторых, если мы сделаем [block copy], переменные будут сохранены, если мы не будем копировать , блок указывает на адрес стека, скопируйте его в кучу, чтобы сделать его безопасным.
переменная 'массив' является переменной-членом, поэтому она не сохраняется, и, в то же время, значение self будет сохранено, независимо от того, помещаете ли вы его в блок или нет, если переменная является локальной переменной, она будет сохранена. (это то, что я до сих пор не понимаю, почему переменная-член не сохраняется, вместо этого добавляется self еще на один счет ??? pls, ответьте мне?)
после использования блока мы можем установить его равным nil self.block = nil; чтобы освободить переменные, и избежать цикла сохранения.
PS. метод, позволяющий прервать сохранение цикла, это использовать __block id weakSelf = self; в блоке, это означает, что переменные __block также не сохраняются.