¿Cómo puede la liberación automática de UISearchDisplayController provocar un bloqueo en un controlador de vista diferente?

Tengo dos controladores de vista A y B. Desde A, navego para ver el controlador B de la siguiente manera:

// in View Controller A 
// navigateToB method

-(void) navigateToB {

BViewController *bViewController = 
[[BViewController alloc] initWithNibName: @"BView" bundle:nil];

bViewController.bProperty1 = SOME_STRING_CONSTANT;
bViewController.title = @"A TITLE OF A VC's CHOOSING"; 
[self.navigationController pushViewController: bViewController animated:YES];
[bViewController release]; //<----- releasing 0x406c1e0

}

En BViewController, la propiedad bPropery1 se define con copia de la siguiente manera (nota, B también contiene UITableView y otras propiedades):

@property (nonatomic, copy) NSString *bProperty1;

Todo parecía funcionar bien al navegar de un lado a otro entre A y B. Eso fue hasta que agregué un UISearchDisplayController a la vista de tabla contenida en BViewController. Ahora, cuando salgo de B, de regreso a A, la aplicación se bloquea.

El seguimiento de pila muestra lo que parece que el controlador de pantalla de búsqueda se lanza automáticamente en el momento del bloqueo:

#0 0x009663a7 in ___forwarding___
#1 0x009426c2 in __forwarding_prep_0___
#2 0x018c8539 in -[UISearchDisplayController _destroyManagedTableView]
#3 0x018c8ea4 in -[UISearchDisplayController dealloc]
#4 0x00285ce5 in NSPopAutoreleasePool

NSZombies muestra:

-[BViewController respondsToSelector:]: message sent to deallocated instance 0x406c1e0

Y el historial de malloc en esto apunta al bViewController ya lanzado en el método de navegación A de A anterior:

    Call [2] [arg=132]: thread_a065e720 |start  ... <snip> 
..._sendActionsForEvents:withEvent:] | -[UIControl sendAction:to:forEvent:] | -
[UIApplication sendAction:to:from:forEvent:] | -[**AViewController navigateToB**] | 
+[NSObject alloc] | +[NSObject allocWithZone:] | _internal_class_createInstance | 
_internal_class_createInstanceFromZone | calloc | malloc_zone_calloc 

¿Alguien puede darme alguna idea sobre lo que está sucediendo aquí? En el método navigationToB, una vez que se lanza el bViewController (después de pushViewController), eso debería ser para bViewController. Nada más lo sabe, ya que es local para el bloque de método de NavigationToB y se ha lanzado.

Al navegar desde B de regreso a A, no se invoca nada en viewDidLoad, viewWillAppear, etc. que volverá a ingresar a navigationToB.

Parece que de alguna manera el controlador de pantalla de búsqueda tiene una referencia a algo en mi AViewController y, como se publica automáticamente, está eliminando este "algo", pero no puedo entender cómo esto es posible, especialmente porque estoy usando copiar para pasar datos entre A y B.

Me voy al baño por esto. Estoy seguro de que este es mi error en algún lugar, por lo que recurro a ti, leyendas de Stack Overflow, en busca de palabras sabias o consejos sobre cómo resolver esto.

Muchas gracias.