Determine si un object referencedo débil se ha desasignado.

Utilizo el siguiente código para download imágenes:

- (void)downloadImageAtUrl:(id)url andDelegate:(id<IPServerDelegate>)delegate_ { NSURL *correctUrl = nil; if ([url isKindOfClass:[NSString class]]) correctUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kHostURL, [url substringFromIndex:1]]]; else correctUrl = url; __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:correctUrl]; [imageRequestsArray addObject:request]; [request setCompletionBlock:^{ if (request.responseStatusCode == 200) { if (delegate_ && [delegate_ respondsToSelector:@selector(didDownloadImage:atUrl:)]) { [delegate_ didDownloadImage:request.responseData atUrl:request.url]; } } else { if (delegate_ && [delegate_ respondsToSelector:@selector(failedToDownloadImageWithUrl:)]) { [delegate_ failedToDownloadImageWithUrl:request.url]; } } [imageRequestsArray removeObject:request]; }]; [request setFailedBlock:^{ if (delegate_ && [delegate_ respondsToSelector:@selector(failedToDownloadImageWithUrl:)]) { [delegate_ failedToDownloadImageWithUrl:request.url]; } [imageRequestsArray removeObject:request]; }]; [request startAsynchronous]; } 

Si el object delegate_ ha sido desasignado, la aplicación se bloquea. ¿Cómo determino que el object delegate_ se haya desasignado sin tener que crear una reference directa? Sé acerca de __ pointers débiles en iOS 5, pero mi aplicación debe ser compatible con iOS 4.3.

Bueno, cuando tu delegate_ es desasignado, supongo que es un lanzamiento. Cuando es, después de:

 [object release]; 

Hacer esto:

 object=nil; 

En su código, simplemente verifique si existe:

 if(delegate_){ } 

Ok, entonces encontré una solución. Estoy almacenando todos los objects ASIHTTPRequest en la matriz de requestes. Cuando alguno de mis UIViewControllers está a punto de desaparecer (viewWillDisappear), estoy enumerando a través de la matriz y envío post de cancelación a cada uno de los objects de request. El único inconveniente aquí es que esas requestes deben reanudarse cada vez que aparezca la vista nuevamente, pero al less no se cuelga.