Manejo de problemas de propiedad de puntero a puntero en ARC

Suppose Objeto A tiene una propiedad:

@property (nonatomic, strong) Foo * bar;

Sintetizado en la implementación como:

@synthesize bar = _bar;

Objeto B manipula unaFoo **, como en este ejemplo, llame desde Objeto A:

Foo * temp = self.bar;
[objB doSomething:&temp];
self.bar = temp;
Puede esto, o algo similar, hacerse legítimamente?Cuál es la declaración correcta para ladoSomething: método?

Además, supongamos Objeto B puede ser desasignado antes de que tenga la oportunidad de establecer elbar property (y así asumir la propiedad de la instancia señalada portemp) - ¿Cómo le diría a ARC que entregue una referencia de propiedad? En otras palabras, si quisiera que funcionara el siguiente fragmento de ejemplo, ¿cómo necesitaría manejar los problemas de ARC?

Foo * temp = self.bar;    // Give it a reference to some current value
[objB doSomething:&temp]; // Let it modify the reference
self.bar = nil;           // Basically release whatever we have
_bar = temp;              // Since we're getting back an owning reference, bypass setter
¿En qué no estoy pensando?

EDITA

Basado en la respuesta de @KevinBallard, solo quiero confirmar mi comprensión. ¿Es esto correcto

Objeto A:

@implementation ObjectA

@synthesize bar = _bar;

- (void)someMethod
{
    ObjectB * objB = [[ObjectB alloc] initWithFoo:&_bar];
    // objB handed off somewhere and eventually it's "doSomething" method is called.
}

@end

Objeto B:

@implementation ObjectB
{
    Foo * __autoreleasing * _temp;
}

- (id)initWithFoo:(Foo * __autoreleasing *)temp
{
    id self = [super init];
    if (self)
    {
        _temp = temp;
    }
    return self;
}

- (void)doSomething
{
    ...
    *_temp = [[Foo alloc] init]; 
    ...
}

@end

Esto crea un error en tiempo de compilación:passing address of non-local object to __autoreleasing parameter for write-back

Respuestas a la pregunta(4)

Su respuesta a la pregunta