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