¿Cómo puedo obtener OCMock bajo ARC para dejar de llenar un conjunto de subclase NSProxy usando una propiedad débil?

DebajoARC, Tengo un objeto,Child que tiene unweak propiedad,parent. Estoy tratando de escribir algunas pruebas paraChild, y me estoy burlando de suparent propiedad usandoOCMock.

Bajo ARC, estableciendo unNSProxya subclase @ que usa un establecedor de propiedades débiles sintetizado no establece la propiedad ... la línea después de que se establece la propiedad débil, verificando que revela que ya esnil. Aquí está el ejemplo concreto:

@interface Child : NSObject
@property (nonatomic, weak) id <ParentInterface>parent;
@end

@implementation Child
@synthesize parent = parent_;
@end

//  ... later, inside a test class ...

- (void)testParentExists
{
    // `mockForProtocol` returns an `NSProxy` subclass
    //
    OCMockObject *aParent = [OCMockObject mockForProtocol:@protocol(ParentInterface)];
    assertThat(aParent, notNilValue());

    // `Child` is the class under test
    //
    Child *child = [[Child alloc] init];
    assertThat(child, notNilValue());

    assertThat(child.parent, nilValue());
    child.parent = (id<ParentInterface>)aParent;
    assertThat([child parent], notNilValue());  // <-- This assertion fails
    [aParent self]; // <-- Added this reference just to ensure `aParent` was valid until the end of the test.
}

Sé que puedo solucionar esto usando unassign propiedad en lugar de unaweak propiedad para elChild para hacer referencia a laParent, pero luego tendría quenil fuera deparent cuando terminé con eso (como una especie de hombre de las cavernas), que es exactamente el tipo de cosas que se suponía que ARC debía obviar.

¿Alguna sugerencia sobre cómo hacer pasar esta prueba sin cambiar el código de mi aplicación?

Edita: Parece que tiene que ver conOCMockObject ser unNSProxy, si hagoaParent ser una instancia deNSObject, elchild.parent referencia débil "contiene" un valor no nulo. Todavía estoy buscando una manera de pasar esta prueba sin cambiar el código de la aplicación.

Edit 2: Después de aceptar la respuesta de Blake, hice una implementación en mi proyecto de una macro de preprocesador que cambió condicionalmente mis propiedades de débil -> asignar. Su experiencia puede ser diferente

#if __has_feature(objc_arc)
#define BBE_WEAK_PROPERTY(type, name) @property (weak, nonatomic) type name
#else
#define BBE_WEAK_PROPERTY(type, name) @property (assign, nonatomic) type name
#endif

Respuestas a la pregunta(6)

Su respuesta a la pregunta