Когда вы создаете экземпляр peopleFlow, он имеет счет сохранения 1.
Затем, когда вы добавляете его как подпредставление, суперпредставление сохраняет его, поэтому его счет хранения равен 2.
Затем вы отпускаете его после добавления его в суперпредставление, поэтому его счет сохранения снова равен 1.
Затем вы удаляете его из суперпредставления, и суперпредставление освобождает его, так что счет сохранения равен 0 и объектосвобождается.
Затем вы пытаетесь выпустить его снова, и он падает, потому что вы отправляете release
на освобожденный объект.
Короче говоря, в данном случае вы непосле удаления из суперпредставления не нужно его выпускать.
Кроме того, хорошей практикой является присвоение nil указателю, если вы его отпустите и вам больше не важно, что указывает на него.Это связано с тем, что после того, как вы освободили и освободили объект, переменная-указатель все еще указывает на память, которую занимал объект.Присвоение nil указателю предотвращает любые неприятности, если вы пытаетесь отправить сообщение тому, на что указывает свисающий указатель.