O que significa "não atômico" neste código?
@property(nonatomic, retain) UITextField *theUsersName;
Qual é a diferença entre atômica e não atômica?
obrigado
O que significa "não atômico" neste código?
@property(nonatomic, retain) UITextField *theUsersName;
Qual é a diferença entre atômica e não atômica?
obrigado
Respostas:
Dê uma olhada no Apple Docs .
Basicamente, se você disser nonatomic
e gerar os acessadores usando @synthesize
, se vários encadeamentos tentarem alterar / ler a propriedade de uma só vez, poderão ocorrer más. Você pode obter valores parcialmente gravados ou objetos liberados / retidos demais, o que pode levar facilmente a falhas. (Isso é potencialmente muito mais rápido que um acessador atômico.)
Se você usar o padrão (que é atomic
; não havia palavra-chave para isso, mas existe agora ), os @synthesize
métodos d usarão um bloqueio no nível do objeto para garantir que várias leituras / gravações em uma única propriedade sejam serializadas. Como os documentos da Apple apontam, isso não significa que todo o objeto seja seguro para threads , mas as propriedades / leituras / gravações individuais são.
Obviamente, se você implementar seus próprios acessadores, em vez de usar @synthesize
, acho que essas declarações não fazem nada, exceto expressar sua intenção de saber se a propriedade é implementada de maneira segura.
atomic
evita falhas ao acessar propriedades individuais, mas não garante que o objeto como um todo (por exemplo, acessar propriedades separadas, como o nome e o sobrenome) funcione a coisa certa.
Depois de ler tantas postagens de artigos e do StackOverflow, e tendo criado aplicativos de demonstração para verificar os atributos de propriedades variáveis, decidi reunir todas as informações de atributos
então, abaixo, está o link detalhado do artigo, onde você pode encontrar todos os atributos mencionados acima, que definitivamente o ajudarão. Muito obrigado a todas as pessoas que dão as melhores respostas aqui !!
Exemplo:
@property (retain) NSString *name;
@synthesize name;
Exemplo:
@property (nonatomic, retain) NSString *name;
@synthesize name;
Além do que já foi dito sobre segurança de encadeamento, propriedades não atômicas são mais rápidas que acessadores atômicos. Geralmente não é algo com que você precise se preocupar, mas lembre-se disso. As propriedades geradas por Dados Principais não são atômicas parcialmente por esse motivo.
Se você especificar "atômico", as funções de acesso geradas terão algum código extra para proteger contra atualizações simultâneas.
Geralmente atômica significa que as gravações / leituras na propriedade acontecem como uma única operação. Atomic_operation
Você pode obter um controle sobre esses materiais lendo o artigo abaixo.
Rosqueamento Explicado com o objetivo não atômico
não atômico - Não é seguro para threads
atomic - Thread Safe - Este é o atributo de propriedade padrão.
O "atômico" significa que o acesso à propriedade é seguro para threads, enquanto o "não atômico" é o oposto. Quando você declara uma propriedade no Objective-C, a propriedade é atômica por padrão, de modo que os acessadores sintetizados fornecem acesso robusto à propriedade. em um ambiente multithread, ou seja, o valor retornado do getter ou definido através do setter é sempre totalmente recuperado ou definido, independentemente de quais outros threads estejam executando simultaneamente.Mas se você declarar a propriedade como não atômica, como abaixo
@property (nonatomic, retain) NSString *myString;
então significa que um acessador sintetizado para uma propriedade de objeto simplesmente retorna o valor diretamente. O efeito do atributo não atômico depende do ambiente. Por padrão, os acessadores sintetizados são atômicos. Portanto, o atômico é consideravelmente mais rápido que o atômico.
Um é para multi threads. Um não