Если предыдущие комментарии не решат эту проблему, возможно, это может помочь. Я предполагаю, что вы создали свое свойство someViewController, подобное этому
@property (nonatomic, retain) NSViewController* someViewController;
в этом случае я считаю, что ваш код правильный (по крайней мере, я вижу, как он должен работать), и вы можете увидеть здесь вторичный сбой.
т.е. когда ты звонишь
self.someViewController = nil;
это должно немедленно освобождать память (при условии, что кадр прошел там, где существует VC, поэтому количество автоосвобождений уже уменьшилось). Поэтому, если у вас есть ДРУГОЙ объект, используемый в этом VC someViewController, который все еще существует и имеет делегат, установленный для вашего объекта someViewController, и выполняет фоновую задачу, это вызовет сбой, когда он попытается вернуться к вашему теперь освобожденному объекту. (Если вы не освободите свой VC, вы не увидите этого сбоя)
Например, если у вас есть MKMapKit, отображаемый в someViewController, а для делегата установлено значение someViewController... если вы реализовали метод в someViewController
mapViewDidFinishLoadingMap:(MKMapView*)mapView
MKMapKit все еще может вызывать это из другого потока, если вы не уничтожили объект MKMapView перед своим.
Я бы всегда устанавливал другие делегаты объекта, указывающие на ваш VC (например, MKMapView), на ноль, прежде чем уничтожать указанный VC, который он использует, чтобы избежать этого риска. Для рендеринга PDF (CALayer?) вы можете обнаружить, что вам также нужно явно освободить объект, учитывая, что это использует другую парадигму распределения/освобождения памяти.
person
sradforth
schedule
11.02.2011
someViewController
? - person jv42   schedule 11.02.2011