J'utilise le code suivant pour télécharger des images:Déterminer si un objet référencé faible a été désallouée
- (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 l'objet delegate_ a été désallouée les application se bloque. Comment puis-je déterminer que l'objet delegate_ a été désalloué sans avoir à créer une référence directe? Je connais les pointeurs faibles dans iOS 5, mais mon application doit être compatible avec iOS 4.3.
Merci, mais ce n'est pas une solution. Comme je l'ai dit, je ne dois pas avoir une référence directe à l'objet délégué, qui est «objet» dans votre réponse. – Eugene
Hummm, donc à tout moment vous pouvez vous retrouver avec un objet désalloué? – Peres
Oui, c'est exactement ainsi. – Eugene