O que faz a propriedade “atômica” significa?
-
03-07-2019 - |
Pergunta
O que "não atômica" significa nesse código?
@property(nonatomic, retain) UITextField *theUsersName;
O que é a diferença entre atômica e não atômica?
Graças
Solução
Dê uma olhada na a Apple Docs .
Basicamente, se você diz nonatomic
, e você gerar os assessores usando @synthesize
, em seguida, se vários segmentos tentar mudar / ler a propriedade de uma só vez, a maldade pode acontecer. Você pode obter valores parcialmente escritas ou over-lançados / objetos acumulados, que podem facilmente levar a falhas. (Isso é potencialmente muito mais rápido do que um acessor atômica, no entanto.)
Se você usar o padrão (que é atomic
; costumava haver nenhuma palavra-chave para este, mas há agora é ), em seguida, os métodos @synthesize
d usar um bloqueio no nível de objeto para garantir que várias leituras / escritas para uma única propriedade são serializados. Como os docs da Apple apontam, isso não significa que todo o objeto é thread-safe , mas a propriedade individual lê / escreve são.
Claro que, se você implementar seus próprios assessores em vez de usar @synthesize
, acho que estas declarações não fazem nada a não ser expressar sua intenção quanto a saber se a propriedade é implementado de forma threadsafe.
Outras dicas
Depois de ler tantos artigos e posts StackOverflow, e ter aplicativos de demonstração feitas para verificar os atributos de propriedade variável, eu decidi colocar todos os atributos informações juntos
- atômica padrão //
- nonatomic
- fortes = reter // default
- fraca = unsafe_unretained
- manter
- Atribuir // default
- unsafe_unretained
- cópia
- readonly
- readwrite // default
assim abaixo está o link artigo detalhado, onde pode encontrar acima mencionadas todos os atributos, que irá ajudá-lo definitivamente. Muito obrigado a todas as pessoas que dão melhores respostas aqui !!
atributos ou modificadores em iOS < propriedade Variable / a>
- atômica
- Atomic significa apenas um acesso rosca variável (tipo estático).
- Atomic é thread-safe.
- Mas é lento no desempenho.
- Atomic é o comportamento padrão.
- Atomic acessores em um ambiente não coleta de lixo (ou seja, quando se utiliza reter / release / disparo automático) vai usar um bloqueio para garantir que outro segmento não interfere com a configuração correta / obtenção do valor.
- não é realmente uma palavra-chave.
Exemplo:
@property (retain) NSString *name;
@synthesize name;
- nonatomic
- meios nonatomic acesso múltiplo rosca variável (tipo dinâmico).
- atômica é o segmento inseguro.
- Mas é rápido no desempenho.
- atômica não é um comportamento padrão; precisamos adicionar palavra-chave nonatomic no atributo propriedade.
- isso pode resultar em um comportamento inesperado, quando dois processos (threads) de acesso diferente a mesma variável ao mesmo tempo.
Exemplo:
@property (nonatomic, retain) NSString *name;
@synthesize name;
Além do que já foi dito sobre threadsafeness, propriedades não-atômicas são mais rápidos que os assessores atômicas. Não é algo que você normalmente precisa se preocupar, mas mantê-lo em mente. Core Data gerado propriedades são nonatomic parcialmente por este motivo.
Em um programa multi-threaded, uma operação atômica não pode ser interrompido parcialmente através, enquanto que as operações não-atômicas pode.
Portanto, você deve usar mutexes (ou algo parecido) se você tiver uma operação crítica que é nonatomic que você não quer interrompida.
Se você especificar "atômica", as funções de acesso gerados ter algum código extra para proteger contra atualizações simultâneas.
Normalmente meios atômicos que escreve / lê à propriedade acontecer como uma única operação. Atomic_operation
Você pode capaz de obter uma alça desta animais lendo o artigo abaixo.
Enfiar explicado com finalidade do nonatomic
nonatomic - Não é o segmento de seguros
atômica - thread-safe - Este é o atributo propriedade padrão.
O "atômica” significa que o acesso à propriedade é thread-safe. Enquanto o "nonatomic" é o oposto disso. Quando você declarar uma propriedade em Objective-C a propriedade são atômicas por padrão para que assessores sintetizados fornecer acesso robusto para propriedade em um ambiente que multithreaded é, o valor retornado do getter ou configurado através do setter é sempre totalmente recuperada ou definida independentemente do que outros segmentos estão sendo executadas simultaneamente. Mas se você declarar propriedade como nonatomic como abaixo
@property (nonatomic, retain) NSString *myString;
então isso significa um acessor sintetizado por uma propriedade do objeto simplesmente retorna o valor diretamente. O efeito do atributo nonatomic depende do ambiente. Por padrão, assessores sintetizados são atômicas. Então nonatomic é consideravelmente mais rápido do que atômico.
Um é para multi linhas. Uma is not