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

Foi útil?

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 @synthesized 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

  1. atômica padrão //
  2. nonatomic
  3. fortes = reter // default
  4. fraca = unsafe_unretained
  5. manter
  6. Atribuir // default
  7. unsafe_unretained
  8. cópia
  9. readonly
  10. 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>

  1. 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;
  1. 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.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top