Chaque fois que je dois utiliser un VaR ou une propriété global à l'intérieur d'un bloc comme celui-ci: Je dois réécrire ceci comme p> Il se plaint même de variables Bool? P> redécrigeant tout avant un bloc semble être une solution boiteux. P> est-ce la voie correctement? Existe-t-il d'une manière élégante? P> Ce truc est laid. J'utilise Arc. P> P> P> P> P> P> P> P> P> P> P> P> P> P >
3 Réponses :
Le problème ne se produit que lorsque vous référencez Dans votre cas, vous avez probablement accédé à un ivar (booléen). L'accès à l'ivar utilise implicitement Le moyen courant de fixer le cycle de retenue est le suivant: P> ... et oui, c'est un peu une partie laide de blocs. p> p> auto code> de l'intérieur du bloc, explicitement ou implicitement. Il n'y a pas d'avertissement émis lors de l'accès aux variables globales.
auto code>, c'est pourquoi le compilateur vous avertit (correctement) sur un cycle de conservation. P>
Homme, c'est laid comme l'enfer. Avoir à redéclairer tout ... merci.
@Markamery Oui, Clang attrape de plus en plus de problèmes. Et c'est correct, la durée de vie de l'objet enfermé doit être étendue au moins jusqu'à la fin du bloc. Édition ...
@Nikolairuhe "La durée de vie de l'objet enfermant doit être étendue au moins jusqu'à ce que le bloc finisse" i> - Nice, je n'ai pas fait remarquer d'abord une raison pour créer une référence forte à auto / Le code> dans le bloc serait préférable d'utiliser
__ dangereux_unéré code>, mais cette phrase seule le rend incroyablement clair. Pourrait même être utile de comparer les deux approches de votre réponse, si vous le souhaitez.
Utiliser __ peu sûr de typeof (auto) faible (auto) faible = auto; code> p>
Je pense que vous ne pouvez pas utiliser __unsafe_unéré avec arc
En plus de la réponse de @ Nikolairuhe, dans votre exemple lorsque vous déclarez les propriétés implique des références code> fortes code>, donc utilisez __ faible code> empêcher le cycle de conservation. Ensuite, vous pourriez vous demander pourquoi vous devez déclarer un
__ FORT CODE> Référence CODE> à Soi faible dans le bloc, et c'est pour vous assurer qu'il ne soit pas libéré pendant la vie du bloc, sinon
faible > ISITSAINT CODE> Casserait si
auto code> a été libéré. p> p>