Il existe deux nouveaux attributs de gestion de la mémoire pour les propriétés introduites par ARC stronget weak.
En dehors de copyce qui est évidemment quelque chose de complètement différent, y a-t-il des différences entre strongvs retainet weakvs assign?
D'après ma compréhension, la seule différence ici est que le pointeur weaksera assigné nil, alors que assignce 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 à nilne fera rien.
Je ne connais aucune différence entre stronget retain.
Y a-t-il une raison pour laquelle je devrais utiliser assignet retaindans de nouveaux projets, ou est-ce que le type est déconseillé?
weaket strong) et 4 qualificatifs à vie variables ( __strong, __weak, __unsafe_unretained, __autoreleasing). Voir les notes ARC ci-dessous.
assignlors 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_unretainedest l'attribut préféré de beaucoup d'entre nous parmi les premiers à adopter. Pour la preuve qu'il unsafe_unretaineds'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,weaketunsafe_unretained.