Возможно, у вас есть цикл подсчета ссылок ... ситуация, когда command
сохраняет invocation
, а invocation
сохраняет command
, и ни один из них не хочет выпускать, пока не появится собственный метод dealloc
, что приводит к ситуации, когда они никогда не освободятся.
Вам необходимо решить, какой из этих двух иерархически является старшим по отношению к другому, и убедиться, что младший объект не сохраняет старший. Между прочим - NSInvocation
не сохранит аргументы, если вы не вызовете retainArguments
. Кроме того, вы можете реализовать метод close
, который вручную говорит одному освободить другой, прерывая цикл.
Я написал пост " Правила, чтобы избежать сохранения циклов " после раскрытия этой точной проблемы с NSInvocation
в одном из моих собственных проектов.