ARC, de Blocs et de Conserver des Cycles

De travail sur un iOS projet qui vise 4.0 et 5.0, à l'aide de l'ARC.

En cours d'exécution dans un problème lié à blocs, l'ARC et la référence à un objet à partir de l'extérieur du bloc. Voici un code:

 __block AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
   [operation setCompletionBlock:^ {
       if ([operation isCancelled]) {
           return;
       }

... do stuff ...

operation = nil;
}];

Dans ce cas, le compilateur émet un avertissement que l'aide de l '"opération" dans le bloc de l'est va conduire à un cycle de conserver. En vertu de l'ARC, __bloc conserve aujourd'hui la variable.

Si j'ajoute __dangereuse_consignes, le compilateur versions de l'objet immédiatement, alors, évidemment, cela ne marchera pas.

Je suis ciblage 4.0 donc je ne peux pas utiliser __faibles.

J'ai essayé de faire quelque chose comme ceci:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
__block __unsafe_unretained AFHTTPRequestOperation *weakOperation = operation;

mais tout weakOperation n'est pas nul, aucun de ses propriétés sont remplies lorsque l'intérieur du bloc.

Quelle est la meilleure façon de gérer cette situation étant donné le projet de contraintes énumérées ci-dessus?

InformationsquelleAutor Hunter | 2011-10-13