ARC débil ivar liberado antes de ser devuelto - cuando se construye para el lanzamiento, no se depura

Tengo una clase que crea un objeto perezosamente y lo almacena como una propiedad débil. Otras clases pueden solicitar este objeto, pero obviamente deben mantener una fuerte referencia a él para evitar que el objeto sea desasignado:

// .h
@interface ObjectManager
@property(nonatomic, weak, readonly) NSObject *theObject;
@end

// .m
@interface ObjectManager ()
@property(nonatomic, weak, readwrite) NSObject *theObject;
@end

@implementation ObjectManager
- (NSObject *)theObject
{
    if (!_theObject) {
        _theObject = [[NSObject alloc] init];
        // Perform further setup of _theObject...
    }
    return _theObject;
}
@end

Cuando el esquema es Xcode está configurado para compilarse para la depuración, las cosas funcionan bien: un objeto puede llamarobjectManagerInstance.theObject y volvertheObject.

Cuando el esquema está configurado para compilarse para su lanzamiento,theObject devolucionesnil:

// Build for Debug:
NSObject *object = objectManagerInstance.theObject;
// object is now pointing to theObject.

// Build for Release:
NSObject *object = objectManagerInstance.theObject;
// object is now `nil`.

Supongo que el compilador está optimizando mi código al ver que_theObject no se usa más en el propio método de acceso, por lo que la variable débil se está configurando paranil antes de volver. Parece que tendría que crear una referencia fuerte antes de devolver realmente la variable, lo que solo puedo hacer usando un bloque, pero sería complicado y preferiría evitarlo.

¿Hay algún tipo de palabra clave que pueda usar con el tipo de retorno para evitar que el ivar se elimine tan pronto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta