Quel est le rôle de mot-clé i trouver la copie code> (mot-clé) peut être utilisé en arc tandis que et j'ai vu Mike Ash Blog sur Arche dit: P>
Vous devez copier explicitement des blocs que vous passez en tant que paramètres d'identification: Â P>
blockquote> mais quand je teste le code comme celui-ci (sans utiliser copier code> dans l'arc
conserver code > et
version code> ne peut pas être utilisé. De plus, le rôle de
copier code> dans arc est identique au rôle de
copier code> en mrc.? Si oui, est-ce que
copie code> fait le
retentaincount code> +1 dans arc? P>
copier code>) il fonctionne aussi aussi. P>
NSArray *array = [[NSArray alloc] initWithObjects:^{NSLog(@"hahaha");}, nil];
[self test:[array objectAtIndex:0]];
- (void)test:(void (^)(void))completion
{
 completion();
}
3 Réponses :
Lorsque vous utilisez copier code> en arc, il fait la même chose que sans arc, c'est-à-dire qu'il crée une copie de l'objet qui reçoit la copie (elle crée une nouvelle instance d'objet en mémoire) et Crée un
relation forte code> à l'objet qui exécute le code.
Cela signifie que la copie de l'objet a maintenant une retenue compte de 1, mais cela ne concerne aucune pertinence pour vous dans l'arc, car cela est traité automatiquement. P>
Copie fait exactement ce que le nom implique. Il renvoie une copie de l'objet. Dites que vous avez un objet mutable et que vous avez un pointeur. Vous vous y référez ensuite ailleurs dans le code et ARC supposera que vous souhaitez pointer sur le même objet et la conserver pour vous. Dans ce cas, si vous modifiez l'une d'entre elles, les deux refléteront les modifications. Si vous le pointiez avec un dans les documents ici: P > Il mentionne que lorsque des blocs sont copiés, tous leurs objets de l'objectif-C reçoivent une référence forte de manière à ne pas abandonner hors de portée avant que le bloc ne soit exécuté. p> < / p> copier code>, vous obtiendrez un nouvel objet et que la modification d'une modification de l'autre n'affectera pas l'autre:
Oui, le rôle de La copie Ainsi, lorsque vous utilisez une copie dans arc, vous pouvez utiliser comme ceci: À propos du bloc code> code> doit être code> copier code> lorsque vous passez comme the document Apple a > dit: p>
Typiquement, vous ne devriez pas avoir besoin de copier (ou de conserver) un bloc. Toi seulement
besoin de faire une copie lorsque vous vous attendez à ce que le bloc soit utilisé après
destruction de la portée dans laquelle il a été déclaré. La copie déplace un
Bloquer au tas p>
blockQuote>
et comme UGHOAVGFHW dit : p>
Les blocs sont similaires aux autres objets pour la gestion de la mémoire, mais pas le
même. Lorsqu'un bloc qui accède aux variables locales est créé, il est
créé sur la pile. Cela signifie qu'il n'est valable que tant que sa
la portée existe. Pour enregistrer ce bloc pour plus tard, vous devez le copier, lequel
la copie au tas p>
blockQuote> copier code> en arc est identique au rôle de
copier code> dans mrr p>
code> invoquera la méthode code> copywithzone: code>. Lors de son envoi à l'objet mutable, il retournera un objet immuable clone, qui retentitCount est 1. Lorsqu'il est envoyé à l'objet immuable, il ne copiera pas, il retournera l'objet lui-même, mais le retenuCount +1. P >
objet1 = [objet2 copie]; code> arc gérera le retenuCompte de la
objet1 code>, quand alors < Code> Object1 Code> est publié par arc, l'objet CODE> Object2 CODE> S sera un changement correspondant. Donc, vous ne vous inquiétez pas de la mémoire. P>
ID code> paramètres. p>
Le nombre de retenue n'augmente pas en utilisant la copie en MRC ou en arc.
@rakech plus précis de dire "le compte de conserver pourrait i> être augmenté en arc / mrr", car il s'agit d'un détail de mise en œuvre. Pour NsmutableString? Vous obtenez une copie. Pour Nstring? Bumps Le retenue compte par un et renvoie le même objet.
Notez que le bloc de votre exemple est probablement un bloc statique et votre code peut donc «travailler» par coïncidence uniquement.
@bbum: vrai. Mais ce que j'essayais de dire était intrinsèquement copie ne provoque pas d'augmentation de comptage de retenue. L'OP semble avoir supposé que.