Il existe deux nouveaux attributs de gestion de la mémoire pour les propriétés introduites par ARC strong
et weak
.
En dehors de copy
ce qui est évidemment quelque chose de complètement différent, y a-t-il des différences entre strong
vs retain
et weak
vs assign
?
D'après ma compréhension, la seule différence ici est que le pointeur weak
sera assigné nil
, alors que assign
ce ne sera pas le cas, ce qui signifie que le programme se bloquera lorsque j'enverrai un message au pointeur une fois qu'il sera libéré. Mais si j'utilise weak
, cela n'arrivera jamais, car envoyer un message à nil
ne fera rien.
Je ne connais aucune différence entre strong
et retain
.
Y a-t-il une raison pour laquelle je devrais utiliser assign
et retain
dans de nouveaux projets, ou est-ce que le type est déconseillé?
weak
et strong
) et 4 qualificatifs à vie variables ( __strong
, __weak
, __unsafe_unretained
, __autoreleasing
). Voir les notes ARC ci-dessous.
assign
lors de la compilation avec ARC était une erreur. Il existe de nombreuses réponses supprimées à ce sujet. Il semble que cela ait été changé avant la version finale. unsafe_unretained
est l'attribut préféré de beaucoup d'entre nous parmi les premiers à adopter. Pour la preuve qu'il unsafe_unretained
s'agit d'un attribut valide, consultez "Programmation avec Objective-C" d'Apple dans la section "Encapsulation de données" sous le sous-titre "Utiliser des références non conservées non sécurisées pour certaines classes". Qui dit: "Pour une propriété, cela signifie utiliser l'attribut unsafe_unretained:"
strong
,weak
etunsafe_unretained
.