Question

Qu'est-ce que "nonatomique"? signifie dans ce code?

@property(nonatomic, retain) UITextField *theUsersName;

Quelle est la différence entre atomique et non atomique?

Merci

Était-ce utile?

La solution

Jetez un coup d'œil à la Apple Docs .

En gros, si vous dites nonatomic et que vous générez les accesseurs à l'aide de @synthesize , si plusieurs threads tentent de modifier / lire la propriété en même temps, des problèmes peuvent se produire. . Vous pouvez obtenir des valeurs partiellement écrites ou des objets libérés / conservés, ce qui peut facilement entraîner des pannes. (Ceci est potentiellement beaucoup plus rapide qu'un accesseur atomique, cependant.)

Si vous utilisez le paramètre par défaut ( atomique ), il n'existait auparavant aucun mot clé, mais est maintenant ), puis les méthodes @synthesize utilisent un verrou au niveau de l'objet pour garantir que plusieurs lectures / écritures à une seule propriété sont sérialisés. Comme le soulignent les docs Apple, cela ne signifie pas que tout l'objet est thread-safe , mais que les propriétés individuelles en lecture / écriture le sont.

Bien sûr, si vous implémentez vos propres accesseurs plutôt que d'utiliser @synthesize , je pense que ces déclarations ne font rien sauf exprimer votre intention de savoir si la propriété est implémentée de manière threadsafe.

Autres conseils

Après avoir lu tant d'articles et de publications StackOverflow et après avoir créé des applications de démonstration pour vérifier les attributs de propriété Variable, j'ai décidé de rassembler toutes les informations sur les attributs

  1. atomic // default
  2. nonatomique
  3. strong = conserver // valeur par défaut
  4. faible = unsafe_unretained
  5. conserver
  6. assign // valeur par défaut
  7. unsafe_unretained
  8. copier
  9. en lecture seule
  10. readwrite // default

voici donc le lien détaillé de l'article où vous pouvez trouver tous les attributs mentionnés ci-dessus, qui vous aideront certainement. Un grand merci à toutes les personnes qui donnent les meilleures réponses ici !!

  

Attributs de propriété de variable ou modificateurs sous iOS

  1. atomique
    • Atomic signifie qu'un seul thread a accès à la variable (type statique).
    • Atomic est thread-safe.
    • Mais les performances sont lentes.
    • Atomic est le comportement par défaut.
    • Les accesseurs atomiques dans un environnement non récupéré (c'est-à-dire en utilisant rétentif / release / autorelease) utiliseront un verrou pour s'assurer qu'un autre thread n'interfère pas avec le réglage / l'obtention correct de la valeur.
    • ce n'est pas réellement un mot clé.

Exemple:

@property (retain) NSString *name;

@synthesize name;
  1. non atomique
    • Nonatomic signifie que plusieurs threads ont accès à la variable (type dynamique).
    • Nonatomic est un thread dangereux.
    • Mais les performances sont rapides.
    • Nonatomic n'est PAS un comportement par défaut. nous devons ajouter un mot clé nonatomic dans l'attribut de propriété.
    • cela peut entraîner un comportement inattendu lorsque deux processus (threads) différents accèdent à la même variable en même temps.

Exemple:

@property (nonatomic, retain) NSString *name;

@synthesize name;

En plus de ce qui a déjà été dit sur la sécurité de threads, les propriétés non atomiques sont plus rapides que les accesseurs atomiques. Ce n’est pas quelque chose qui vous préoccupe habituellement, mais gardez cela à l’esprit. Les propriétés générées par Core Data sont partiellement non atomiques pour cette raison.

Dans un programme multithread, une opération atomique ne peut pas être interrompue partiellement, alors que des opérations nonatomiques le peuvent.

Par conséquent, vous devriez utiliser des mutex (ou quelque chose comme ça) si vous avez une opération critique non atomique que vous ne voulez pas interrompre.

Si vous spécifiez "atomique", les fonctions d'accès générées disposent d'un code supplémentaire permettant d'éviter les mises à jour simultanées.

Généralement, atomique signifie que les écritures / lectures sur la propriété se produisent en une seule opération. Atomic_operation

Vous pouvez obtenir un aperçu de ces informations en lisant l’article ci-dessous.

Threading expliqué avec le but de nonatomic

nonatomic - Non thread thread safe

atomic - Thread Safe - C'est l'attribut de propriété par défaut.

Le "atomic & # 8221; " signifie que l'accès à la propriété est thread-safe. alors que "nonatomique" en est le contraire. Lorsque vous déclarez une propriété dans Objective-C, la propriété est atomique par défaut afin que les accesseurs synthétisés fournissent un accès robuste à la propriété dans un environnement multithread & # 8212; en d'autres termes, la valeur renvoyée par le getter ou définie via le setter est toujours restituée en totalité ou définir quels que soient les autres threads exécutés simultanément. Mais si vous déclarez une propriété non atomique comme ci-dessous

@property (nonatomic, retain)  NSString *myString;

alors cela signifie qu'un accesseur synthétisé pour une propriété d'objet renvoie simplement la valeur. L'effet de l'attribut nonatomic dépend de l'environnement. Par défaut, les accesseurs synthétisés sont atomiques. Donc, non atomique est considérablement plus rapide que l’atome.

L'un est destiné aux multi-threads. On n'est pas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top