12
votes

iOS5 NsManageDObjectContext Types de concurrence et comment sont-ils utilisés?

La littérature semble un peu rare à l'heure actuelle des nouveaux types de concurrence NsmanieDObjectContextContext. Outre la WWDC 2011 Vids et d'autres informations que j'ai ramassées en cours de route, j'ai toujours du mal à saisir la manière dont chaque type de concurrence est utilisé. Vous trouverez ci-dessous comment je vous interprète chaque type. S'il vous plaît corrigez-moi si je comprends quelque chose de mal.

NSCONFINEMENTCONCURENDENCELYPE

Ce type a été la norme au cours des dernières années. Les MOC sont blindés de chaque fil. Donc, si le thread, un MOC veut fusionner des données de fil B MOC via un message Enregistrer, le thread A besoin de souscrire à la notification MOC de la MOC de Whlef B.

NSprivateQueconCurencyCePe

Chaque arborescence MOC (MOCS parent et enfants) partage la même file d'attente, peu importe le fil à chaque fil. Donc, chaque fois qu'un message de sauvegarde de l'un de ces contextes est envoyé, il est mis dans une queue privée spécifiquement faite uniquement pour cet arbre MOC.

NSMainQueconCurencyPe

toujours confondu par celui-ci. D'après ce que je rassemble, c'est comme NsprivateQueconCurencArencyPe, seule la file d'attente privée est exécutée sur le thread principal . J'ai lu que cela est bénéfique pour les communications UI avec le MOC, mais pourquoi? Pourquoi devrais-je choisir cela sur NsprivateQueconCurencyRencyPe? Je suppose que depuis que le NsmainqueuConCurencyPe est exécuté dans le fil principal, cela ne permet pas de ne pas autoriser les processus de fond? N'est-ce pas la même chose que de ne pas utiliser de threads?


0 commentaires

3 Réponses :


6
votes

Les types de voies de la file d'attente vous aident à gérer les données de base MOULITHREDED:

Pour les deux types, les actions ne se produisent que sur la bonne file d'attente lorsque vous les utilisez à l'aide de l'une des méthodes d'exécution. I.e. P>

[context performBlock:^{
    dataObject.title = @"Title";
    [context save:nil]; // Do actual error handling here
}];


0 commentaires

2
votes

Je pense que les réponses sont dans la note: Notes de publication de données de base pour Mac OS X Lion http://developer.apple.com/library/ MAC / # REMEASNOOTES / DATAMANAGE / RN-COREDATA / _INDEX.HTML

Pour NsprivateQueconCurencyCePe , je pense que tu n'es pas raison. Un contexte enfant créé avec ce type de concurrence aura sa propre file d'attente. Le contexte parent / enfant n'est pas entièrement lié au threading. Le parent / enfant semble simplifier la communication entre les contextes. Je comprends que vous devez simplement enregistrer des modifications dans les contextes de l'enfant pour les ramener dans le contexte parent (je n'ai pas encore été testé). Modèle de contexte parent / enfant habituellement est lié à la motion de file d'attente principale / de la file d'attente de fond, mais elle n'est pas obligatoire. [Modifier] Il semble que l'accès au magasin (sauvegarde et chargement) soit effectué via le contexte principal (dans la file d'attente principale). Il ne s'agit donc pas d'une bonne solution pour effectuer des extraçons de fond car la requête derrière Executefetchrequest sera toujours effectuée dans la file d'attente principale.

pour nsmainqueueconcurencycurencype , c'est la même chose que NsprivateQueconCurencyPePe , mais comme il est lié à la file d'attente principale, je comprends que vous effectuez une opération avec le contexte sans nécessité sans nécessiteur d'utilisation. Si vous êtes dans le contexte de la file d'attente principale, Code du délégué du contrôleur, par exemple, (ViewDidLoad, etc.).


0 commentaires

1
votes

Midas06 a écrit:

Imaginez avoir un contexte parent qui fait tout io sur un fond fil qui est un contexte de file d'attente privé, puis vous faites tout votre ui Travailler contre un contexte enfant du type de file d'attente principale.

J'ai compris que ce soit l'inverse: vous mettez le contexte parent sur le fil principal à l'aide de NsmainqueuConCurencyType et du contexte de l'enfant sur le fil d'arrière-plan à l'aide de NsprivatequeyeconCurencyType. Je me trompe?


0 commentaires