Во-первых, можете ли вы описать проблему, которую вы пытаетесь решить с помощью этого кода?Я спрашиваю, потому что это кажется очень сложным, и моя первоначальная мысль заключается в том, что упрощение не только прояснит, что вы делаете, но также, вероятно, решит и вашу утечку.
Во-вторых, (и я могу ошибаться)вам нужно только сохранять / освобождать объекты, если вы ожидаете, что эти объекты существуют вне области действия метода, или вы ожидаете, что они могут быть освобождены некоторым кодом, который вы кодируете в своем методе.Исходя из этого, вы, кажется, слишком долго сохраняете и выпускаете код.Я думаю, что вы можете удалить многое из этого.
Опять же, я могу ошибаться, но, похоже, вы действительно будете течь.Причина, по которой я так думаю, заключается в следующем: при первом проходе вы сохраняете некоторые данные в dateToReturn
, который является локальной переменной.Тогда вы делаете
self.initialStartDateAndTime = [[dateToReturn copy] autorelease];
Но это не выпуск dateToReturn
.Вместо этого он выпускает копию dateToReturn
.dateToReturn
все еще сохраняется.Предполагая, что вы намереваетесь автоматически выпустить копию, потому что initialStartDateAndTime
установлен с помощью retain, я думаю, что вы должны сделать:
self.initialStartDateAndTime = [[dateToReturn copy] autorelease];
[dateToReturn release];
Конечно, если вы удалите дополнительные сохранения / выпуска, это снова станет проще.
Последнее, что я хотел бы предложить, - это назвать.Проблема с таким кодом заключается в том, что у вас есть несколько методов и переменных, все с очень похожими именами.Это может затруднить отслеживание и привести к ошибкам.Так что спросите себя, действительно ли вам нужно так много переменных.И можете ли вы сделать свой код более читабельным, изменив некоторые имена.