Tenho não há dúvida que a contagem de referência automática (ARCO) é o seguinte grande pulo para a frente do Objetivo-C desde a introdução do Objetivo-C 2.0. O ARCO permite-lhe pôr a carga da gestão de memória de (Apple LLVM 3.0) o compilador, e nunca pensar conserva, lança e autolança alguma vez novamente.
Desde que as primeiras experiências de muito usuário com o ARCO estarão tentando converter um app existente, eles aprenderão o modo difícil que converter código existente para FORMAR ARCO não é um fogo & esqueça a operação. E desde que isto é a Internet, há também muitas suposições, afirmações falsas e outros mitos que giram em volta do ARCO andar.
Assim aqui está quase tudo que você tem de saber sobre o ARCO, e algum ARCO-MYTHBUSTING também.
- Exigências de desenvolvimento de ARCO apps
- Objetivos de Desdobramento mínimos de ARCO apps
- Objetivos de Desdobramento necessários com referências débeis zeroing
- Como permitir o ARCO no seu projeto
- Compile erros depois de ligar a LLVM 3.0
- Conseguir bibliotecas de terceira pessoa construir com o ARCO
- Converter um app existente para FORMAR ARCO
- “Não pode Converter no ARCO Objetivo-C”
- A fixação de ponteiro datilografa em C structs
- Fixando C/C ++ o ponteiro transfere com formas lançadas uma ponte
- Fixar NSAutoreleasePool com @autoreleasepool
- Métodos você não pode chamar (ou ignorar) mais
- Você ainda pode ignorar - (vazio) dealloc {}
- Restrição de nomeação de propriedade
- Novas palavras-chave de Propriedade: forte e débil
- O ARCO proíbe sintetizar uma propriedade somente de leitura sem qualificador de propriedade
- Para peritos: o descobrimento em compila vez se o ARCO for permitido
- Para peritos: permita o uso de palavras-chave de ARCO com o inválido de ARCO
- Mito: o ARCO não foi provado fiável
- Mito: ARCO leva controle sob gestão de Memória
- Documentação de Referência a ARCO
Exigências de desenvolvimento de ARCO apps
- Xcode 4.2
- O compilador de Apple LLVM 3.0 (Constroem a Colocação)
- iOS app desenvolvimento: Leopardo de Neve 10.6 e mais novo
- Mac app desenvolvimento: Leão 10.7 e mais novo
Não há nenhum desenvolvimento de ARCO de Mac apps abaixo do Leopardo de Neve! E Xcode 4.1 e antes não vem embrulhado ao compilador de Apple LLVM 3.0 (Clangor) que é a primeira versão de compilador de Clangor a apoiar o ARCO.
Objetivos de Desdobramento mínimos de ARCO apps
- dispositivos de iOS: iOS 4.0 ou mais novo
- Computador de Mac: Mac com processador de 64 bits que dirige Leopardo de Neve 10.6 ou mais novo.
O Mac OS X apps com o ARCO permitiu são apps sempre de 64 bits. Você não pode construir o ARCO de 32 bits apps.
Macs com pelo menos um 2 CPU de Duo Principal será capaz de dirigir apps de 64 bits. Macs com o Duo Principal de 32 bits ou Solo Principal (Yonah) CPU não pode dirigir o ARCO apps. Os Macs de 32 bits foram descontinuados perto do fim de 2006, com a exceção do Duo Principal Mac mini que foi descontinuado em agosto de 2007. The 32-Bit Macs have been discontinued near the end of 2006, with the exception of the Core Duo Mac mini which was discontinued in August 2007.
Objetivos de Desdobramento necessários com referências débeis zeroing
- dispositivos de iOS: iOS 5.0 ou mais novo
- Computador de Mac: Leão 10.7 ou mais novo.
Você não pode usar "acidentalmente" referências débeis zeroing sem que notá-lo. Você terá de usar a palavra-chave @property débil ou o __ palavra-chave débil declarando uma variável. Se você usar uma destas palavras-chave, o compilador gerará um erro se você ainda não tenha definido o objetivo de desdobramento conseqüentemente a iOS 5.0 ou a Mac OS X 10.7. If you use one of these keywords, the compiler will generate an error if you haven’t yet set the deployment target accordingly to either iOS 5.0 or Mac OS X 10.7.
Todos Macs capaz do Leão corrente 10.7 podem dirigir o ARCO de 64 bits apps. O leão é o primeiro 64-Bit-only Mac OS X sistema operacional.
Como permitir o ARCO no seu projeto
Você precisará de assegurar-se que a Colocação Construir do Compilador de C/C ++/Objective-C é estabelecida no compilador de Apple LLVM 3.0.
Isto é especialmente importante para projetos existentes que ainda podem ser feitos usar LLVM GCC 4.2 ou outro compilador. Se você não seleciona o LLVM 3.0 compilador, nenhum do ARCO relacionou-se as colocações vão se destacar na lista de Colocações Construir.
Com LLVM 3.0 selecionado como compilador o Objetivo-C de Colocação Construir a Referência Automática contar pode ser estabelecida em SIM. Se você criar um novo projeto de um padrão Xcode você também terá a opção de permitir o ARCO no novo mago de projeto selecionando Uso Referência Automática contar.
Compile erros depois de ligar a LLVM 3.0
Se você anteriormente usava um compilador diferente, é absolutamente possível que LLVM 3.0 gere novos avisos e erros onde não houve nenhum antes, até com o inválido de ARCO. Isto é o LLVM 3.0 compilador que se tornou um pouco melhor no momento do descobrimento de código potencialmente perigoso.
Recomendo construir primeiro o seu app com LLVM que 3.0 compilador e o ARCO inutilizaram, para assegurar-se todo o LLVM 3.0 questões relacionadas foram fixadas antes de tentar converter o seu código para FORMAR ARCO.
Por exemplo, LLVM 3.0 é capaz agora de descobrir alguma “tabela potencial fora de limites” questões graças ao projeto de SAFECode, e ele está mais resmungando um bocado quando ele vem ao arremesso de um tipo ao outro, especialmente relacionado a cadeias de formato. A maior parte destas questões são fáceis resolver. De fato, LLVM 3.0 ajuda-o a determinar onde a questão é pela diagnóstica expressiva, mas infelizmente Xcode esconde isto bastante bem do usuário. In fact, LLVM 3.0 helps you determine where the issue is through expressive diagnostics, but unfortunately Xcode hides that pretty well from the user.
Para ver a diagnóstica expressiva em Xcode, vá ao Navegador de Log (Command+7) e selecione o log mais recente com o aviso ou erro nele:
Então clique o botão de detalhes para a direita do símbolo de aviso/erro (somente acima de "mais" conexão) para ver o LLVM 3.0 afirmação de diagnóstica expressiva, apontando exatamente para o caráter ou variedade de carateres que causam a questão:
Conseguir bibliotecas de terceira pessoa construir com o ARCO
A primeira coisa a fazer com bibliotecas de terceira pessoa incompatíveis é construi-los como uma biblioteca estática separada. Tome por exemplo Cocos2D cujo padrão de projeto de Xcode simplesmente põe todo do código de Cocos2D no objetivo do seu projeto. Seria um pesadelo para tentar e atualizar o código de biblioteca Cocos2D inteiro para apoiar o ARCO. Enquanto você pode inutilizar o ARCO de arquivos de texto fonte individuais com a bandeira de compilador-fno-objc-arc, seria tedioso para fazer assim para mais do que somente alguns arquivos. It would be a nightmare to try and update the entire Cocos2D library code to support ARC. While you can disable ARC for individual source code files with the -fno-objc-arc compiler flag, it would be tedious to do so for more than just a few files.
Uma vez que você constrói o texto fonte Cocos2D separadamente como uma biblioteca estática, as modificações necessárias são limitadas a três lugares: CCDirector (retiram NSAutoreleasePool), CCActionManager (acrescentam __ unsafe_unretained) e CCArray (acrescentam __ unsafe_unretained, refator código ligado em série no arquivo de implementação). Tim Games muito pequeno delineou estas modificações e fornece um garfo do cocos2d-I-Phone que é compatível com o ARCO – se construído como uma biblioteca estática.Tiny Tim Games have outlined these changes and provide a fork of cocos2d-iphone that is compatible with ARC – if built as a static library.
A propósito, Kobold2D é totalmente compatível com o ARCO. De fato ele tem o ARCO permitido à revelia em todos os projetos conservando cheio para trás compatibilidade se você não quiser usar o ARCO!
Se construir uma biblioteca estática ainda causar demasiadas questões com aquela biblioteca, logo vá ao fórum daquela biblioteca, procure postos relacionados de ARCO e/ou suporte de ARCO de pedido. Muitas bibliotecas de fonte abertas até não compilam limpamente com LLVM 3.0 ainda, sem falar no ARCO de suporte. Isto tem de modificar-se rapidamente porque o suporte de revelador de biblioteca diretamente influi na tarifa de adoção do ARCO. This needs to change quickly because library developer support directly influences the adoption rate of ARC.
Converter um app existente para FORMAR ARCO
Há um app para isto!
Bem, para ser exata há uma opção de cardápio em Xcode 4.2 para isto. Você o encontrará se você abrir o seu projeto em Xcode e selecionar Editam-> Refator-> Converso ao ARCO Objetivo-C.
Você será presentado uma lista de objetivos que você quer converter. Assegure-se que você não seleciona nenhuma biblioteca estática que você não escreveu você mesmo. As bibliotecas estáticas podem ser ligadas a um app permitido pelo ARCO sem ter necessidade de fato de ser ARCO compatível. Embora você devesse fazer algumas modificações aos arquivos de cabeçada da biblioteca. Mais nisto depois. Static libraries can be linked to an ARC-enabled app without actually having to be ARC compatible. Although you may have to make some changes to the library’s header files. More on that later.
“Não pode Converter no ARCO Objetivo-C”
Oh caro!
A conversão em alguns casos automática não é tão automática como você esperaria que fosse. Em muitos casos isto é por causa de bibliotecas estáticas incompatíveis.
Na maioria dos casos os problemas estão relacionados sozinho a id ou outros tipos de ponteiro guardados em um C struct, ponteiros passantes para e de C/C ++ o código ou o uso da classe NSAutoreleasePool que não está disponível construindo um app com o ARCO permitiram. Leia em para soluções para as questões mais comuns.
A fixação de ponteiro datilografa em C structs
O ARCO vai se queixar de um C struct que guarda tipos de ponteiro:
id someObject;
void* somePointer;
SomeClass* someClassInstance;
} someStruct;
Isto é bastante fácil fixar preesperando os tipos de ponteiro com o __ unsafe_unretained palavra-chave:
__ unsafe_unretained id someObject;
__ unsafe_unretained void* somePointer;
__ unsafe_unretained SomeClass* someClassInstance;
} someStruct;
Isto diz a ARCO que a memória para estes que o ponteiro datilografa é dirigida manualmente, isto é o caminho velho e de escola. Daqui em diante o tipo de ponteiro é "não conservado" pelo ARCO, e é "perigoso" porque a memória pode ser anulada mas o ponteiro não é estabelecido no nada automaticamente, que pode criar possivelmente um ponteiro pendente. Isto é o modo que foi todo o tempo, o ARCO somente quer que você reconheça expressamente que você está fazendo algo que se considera perigoso. That’s the way it has been all the time, ARC just wants you to expressly admit that you’re doing something that is considered unsafe.
Se o seu código trabalhou perfeito antes, __ o unsafe_unretained simplesmente vai se assegurar que ele compila abaixo do ARCO. Mas para o novo código você deve evitar ter necessidade de usar aquela palavra-chave. Uma opção é modificar todo o C structs em classes Objetivas-C inconseqüentes com propriedades. One option is to change all C structs into lightweight Objective-C classes with properties.
Fixando C/C ++ o ponteiro transfere com formas lançadas uma ponte
Em casos onde você está passando id ou ponteiros de objeto para e de C/C ++ código, o compilador vai se queixar da conversão e sugerirá uma forma lançada uma ponte:
b2BodyDef bodyDef;
bodyDef.userData = aSprite; //ERRO! // ERROR!
//Obtenção do duende userdata de Box2D
Duende de CCSprite* = (CCSprite *) corpo-> GetUserData (); //ERRO!CCSprite*)body->GetUserData(); // ERROR!
Novamente isto é fácil fixar lançando propriamente o tipo de ponteiro e preesperando-o com o __ palavra-chave de ponte:
b2BodyDef bodyDef;
o bodyDef.userData = (__ lançam uma ponte sobre o vazio *) aSprite;__bridge void*)aSprite;
//Obtenção do duende userdata de Box2D
O duende de CCSprite* = (__ lançam uma ponte sobre CCSprite *) o corpo-> GetUserData ();__bridge CCSprite*)body->GetUserData();
O __ a palavra-chave de ponte simplesmente significa que o ponteiro é transferido de ou para a terra Objetiva-C inalterada. O ARCO não conservará nem nem lançará aquele ponteiro.
As palavras-chave especiais __ bridge_transfer e __ bridge_retain só devem ser usadas tratando com objetos de Fundação Principais lançados uma ponte gratuitos onde você teria de chamar normalmente CFRetain e/ou CFRelease para dirigir a vida de objeto de Fundação Principal.
Fixar NSAutoreleasePool com @autoreleasepool
O ARCO substituiu a classe NSAutoreleasePool com a diretiva de compilador @autoreleasepool.
Você deve substituir o código usando NSAutoreleasePool:
//crie alguns objetos temporários aqui …
[junte o lançamento];
junte = nada;
Com a palavra-chave @autoreleasepool:
{
//crie alguns objetos temporários aqui …
}
Métodos você não pode chamar (ou ignorar) mais
Você terá de retirar todas as chamadas a estes métodos sem substituição:
- conservar
- retainCount
- lançamento
- autolançamento
- dealloc
Você também não pode usar a palavra-chave conservar com propriedades mais. Em vez disso, use a palavra-chave forte.
Você não pode ignorar mais estes métodos na sua classe:
- conservar
- retainCount
- lançamento
- autolançamento
Você ainda pode ignorar - (vazio) dealloc {}
Você não pode chamar dealloc mas você ainda pode ignorar o - (vazio) dealloc {} método. Isto é útil para lançar a memória de C/C ++ objetos. Por exemplo você ainda tem de ser capaz de libertar a memória de um exemplo mundial Box2D. De mesmo modo há exemplos onde você tem de retirar mesmo como o delegado de outra classe quando o mesmo a classe é anulada. For example you still need to be able to free the memory of a Box2D world instance. Similarly there are instances where you need to remove self as the delegate of another class when the self class is deallocated.
Há um determinado hábito que você tem de deixar vão de. Desde que você não pode chamar dealloc, você também não deve chamar [dealloc super]. O compilador gerará o [dealloc super] chamada nos bastidores automaticamente. The compiler will generate the [super dealloc] call behind the scenes automatically.
Restrição de nomeação de propriedade
Você não pode criar uma propriedade cujo nome começa com "novo". Isto é tudo.
Novas palavras-chave de Propriedade:
forte e débilA palavra-chave @property forte é sinônima para conservar:
@property MyClass (forte) *myObject;myObject;
Ao passo que débil é semelhante para destinar, exceto que uma propriedade débil será estabelecida no nada automaticamente quando o objeto é anulado (daqui: zeroing referência débil):
@property MyClass (débil) *myObject;myObject;
Zeroing referências débeis estão só disponíveis visando iOS 5.0 e mais novo, ou Mac OS X Leão 10.7 e mais novo.
O ARCO proíbe sintetizar uma propriedade somente de leitura sem qualificador de propriedade
Normalmente, quando você declara uma propriedade somente de leitura, não importa o que o tipo de armazenamento é (conserve, destine, cópia) desde que as propriedades somente de leitura não podem ser destinadas a. Tome este por exemplo:
Agora com o ARCO, se você não declarar o ivar manualmente (@synthesize pode gerar ivars) você encontrará um erro estranho na linha @synthesize, afirmando:
erro: o ARCO proíbe sintetizar uma propriedade de um objeto Objetivo-C com propriedade não especificada ou atributo de armazenamento [4]
Tão ímpar como pode parecer, neste caso você terá de especificar a palavra-chave de armazenamento em uma propriedade somente de leitura, acrescentando forte ou débil:
Isto especifica o qualificador de propriedade do ivar pela declaração @property. A alternativa deveria declarar o ivar manualmente, que forçará a propriedade de usar o mesmo qualificador de propriedade que o ivar.
Para peritos:
o descobrimento em compila vez se o ARCO for permitidoSe você tiver de descobrir se o seu código é construído com ou sem ARCO, por exemplo se você for o revelador de uma biblioteca pública, você pode usar as seguintes macros para determinar se o ARCO é permitido em compilam o tempo.
#ifndef __ has_feature
#define __ has_feature (x) 0
#endif
#ifndef __ has_extension
#define __ has_extension __ has_feature//Compatibilidade com pre3.0 compiladores.
#endif
#if __ has_feature (objc_arc) && __ clang_major __> = 3
#define ARC_ENABLED 1
#endif//__ has_feature (objc_arc)
Para peritos:
permita o uso de palavras-chave de ARCO com o inválido de ARCOComo um autor de biblioteca, uma das piores coisas você pode fazer para assegurar que a compatibilidade para trás da sua biblioteca é a #ifdef cada palavra-chave específica para o ARCO e escreva cada tal linha duas vezes: uma vez sem a palavra-chave de ARCO, uma vez com a palavra-chave de ARCO.
#ifdef ARC_ENABLED
o void* pointerToSelf = (__ lançam uma ponte sobre o vazio *) mesmo; (__bridge void*)self;
#else
void* pointerToSelf = (vazio *) mesmo; (void*)self;
#endif//ARC_ENABLED
Em vez disso proponho definir simplesmente as palavras-chave de ARCO como “noop” afirmações quando o ARCO está indisponível. Assim o seu código usando palavras-chave de ARCO ainda compilará abaixo de Xcode 4.1 ou LLVM GCC4.2, e você não precisa a #ifdef de nada relacionado àquelas palavras-chave.
#if! definido (__ ressoam __) || __ clang_major __ <3
#ifndef __ ponte
#define __ ponte
#endif
#ifndef __ bridge_retained
#define __ bridge_retained
#endif
#ifndef __ bridge_transfer
#define __ bridge_transfer
#endif
#ifndef __ autosolta
#define __ autosolta
#endif
#ifndef __ forte
#define __ forte
#endif
#ifndef __ débil
#define __ débil
#endif
#ifndef __ unsafe_unretained
#define __ unsafe_unretained
#endif
#endif//__ clang_major __ <3
Agora está seguro escrever codificar como isto mesmo que o ARCO esteja disponível ou não, porque os compiladores que não apoiam o ARCO só verão o habitual (vazio *) forma:
Mito:
o ARCO não foi provado fiávelComo se a gestão de memória automática tenha alguma propriedade mágica que ocasionalmente vai maluca.
O ARCO ainda segue o mesmo alloc, conserve, lance o ciclo do código Objetivo-C. Não há nenhuma ambigüidade e nenhum caso especial quando ele vem à aplicação de poucos e regras de alloc-retain-release simples. Isto é inteiramente determinista e o compilador pode fazer aquele emprego ainda bem, não, melhor do que você. Não há nada inerentemente e potencialmente inseguro sobre o ARCO. This is entirely deterministic and the compiler can do that job just as well, no, better than you. There’s nothing inherently and potentially unreliable about ARC.
Se você tenha ouvido sobre questões com o ARCO, então eles estão provavelmente relacionados a situações onde um ARCO app inter-relaciona com a Fundação Principal ou outro C/C ++ código. Naquelas situações você terá de aplicar corretamente várias novas palavras-chave (formas de ponte em sua maioria). Faça um erro lá e você empenhou-se um problema. Mas isto não é a falta do ARCO. O mesmo vai para conservam ciclos, que são ainda uma possibilidade no ARCO apps. Make a mistake there and you got yourself a problem. But that’s not the fault of ARC. The same goes for retain cycles, which are still a possibility in ARC apps.
Também apostei a minha vida que a Maçã não anunciaria, promoveria e implementaria o ARCO de iOS e Mac OS X apps se não tinha sido provado estável. Se isto não o convencer, então talvez esta citação do revelador de ARCO CHRIS LATTNER faz:
O ARCO é cuidadosamente construído para ser um modelo de programação fiável que erra no lado de produzir um erro de compilador em vez de produzir silenciosamente um problema de memória em tempo de execução.
Isto também explica um bocado porque você verá mais (inicial) compilam erros com o ARCO permitido.
Mito:
ARCO leva controle sob gestão de MemóriaAlguns sustentam que o ARCO leva o seu controle sob a gestão de memória. Isto à sua vez levaria menos do que a ótima realização em tempo de execução. Daqui em diante o ARCO é mau e deve ser evitado. Henceforth ARC is bad and should be avoided.
Você pode aplicar o mesmo argumento inútil à direção de poder. Há alguns teimosos que não teriam direção de poder, somente por causa de alguma sensação subjetiva sobre o controle que perde. Ignore estas pessoas! Não porque eles estão enganados, eles são corretos em algumas circunstâncias – é somente que aquelas circunstâncias são raras, muito especializadas e necessitam um alto nível da habilidade que o resto 99 % de usuários simplesmente não têm, nem quereriam exercer. Ignore these people! Not because they’re wrong, they are correct in some circumstances – it’s just that those circumstances are rare, very specialized and require a high level of skill that the remaining 99% of users simply don’t have, nor would want to exercise.
E mesmo se você realmente tem as habilidades, você é ainda sujeito a erros do juízo ou outros erros humanos. Portanto até os peritos vão se beneficiar de usar o ARCO (ou poder que dirige no que diz respeito ao assunto) em situações diárias.
Algumas pessoas que sustentam que o ARCO leva o controle não parecem entender o que o ARCO faz. A gestão de memória é sobre a vida de objetos, se a gestão de memória é automatizada com ARCO ou manual. Se a vida de um objeto for em todas as partes da cena inteira (visão, nível, app, etc.) então que o objeto é alocado uma vez quando a cena é inicializada, e anulada quando a cena é anulada. Se você faz isto manualmente, ou automaticamente, resulta no mesmo comportamento da aplicação. If an object’s lifetime is throughout the entire scene (view, level, app, etc) then that object is allocated once when the scene is initialized, and deallocated when the scene is deallocated. Whether you do this manually, or automatically, results in the same behavior of the application.
Todo o mundo tem de entender que o ARCO é determinista. Ele não deve estar enganando-se para a coleção de lixo! Os ciclos de coleção de lixo podem dar pontapés em em qualquer momento casual a tempo quando o coletor de lixo acha necessário libertar um pouco de memória. No ambiente reunido de um lixo, tal como C #, você realmente perde um pouco de controle sob a gestão de memória e em algumas situações isto leva à realização em tempo de execução oscilante. Mas não com ARCO. Garbage collection cycles can kick in at any random moment in time when the garbage collector finds it necessary to free up some memory. In a garbage collected environment, such as C#, you do lose some control over memory management and in some situations this leads to unsteady runtime performance. But not with ARC.
Dizer que o ARCO retira o controle sob a gestão de memória é somente claro incorreto e provavelmente fundado supondo que o ARCO seja igual à coleção de lixo. Ele também pode originar-se do “positives falso” que o Clangor que Analisador Estático produz, que pode ter instilado a dúvida de tecnologias de Clangor "automatizadas" em geral, embora a análise estática e o ARCO sejam partes completamente separadas da tecnologia.
Caminho, em alguns casos você precisaria de exercer o controle sob a gestão de memória e com o ARCO você ainda pode fazer isto, normalmente com as novas palavras-chave de ARCO fortes e débeis, bem como lançar uma ponte sobre formas de ponteiros que estão cruzando limites de ou a C/C ++ terra. Enquanto você está sabendo a vida dos seus objetos você não terá nenhum problema influindo como a vida de objetos é dirigida pelo ARCO.
O ARCO sempre aloca e lança a memória de um objeto no mesmo ponto a tempo na mesma situação (determinista). Assim o Objetivo-C com o ARCO não pode ser em comparação com línguas reunidas de lixo como C #. se você vir alguém compare o ARCO com C #, por favor envie-lhes esta conexão.
Documentação de Referência a ARCO e artigos relacionados
Além disso lendo para aqueles que querem aprender mais sobre o ARCO detalhadamente.
- Clangor: documentação de contando de Referência Automática
- Maçã: Transitar para FORMAR ARCO Notas de Lançamento
- Maçã: Xcode Novo Guia do usuário de Características: Referência Automática contar Automatic Reference Counting
- Mike Ash: na sexta-feira Q&A sobre Referência Automática contar
- StackOverflow: Como a contagem de referência automática trabalha?
- StackOverflow: Quais são as vantagens e desvantagens de usar o ARCO?
- StackOverflow: Qual é a diferença entre contagem de referência automática e coleção de lixo?
- informIT: Objetivo-C de incluindo de Referência Automático, Parte 1
- informIT: Objetivo-C de incluindo de Referência Automático, a Parte 2 Os Detalhes
- Mike Ash: Zeroing referências débeis sem ARCO
- Github: Suporte de referências débeis zeroing em iOS 4 / OS X 10.6
Por favor avise-me se esqueci de acrescentar algo sobre o ARCO! Especialmente se você pensa que deve ser knowlARCdge comum. E não esqueça de repiar este artigo se você gostar dele, agradecimentos! And don’t forget to retweet this article if you like it, thanks!
| Siga @gaminghorror | Siga @kobold2d |
|













Quando li sobre o desenvolvimento Mac sente que fui anos 10/15 atrás a tempo.
Tenho procurado um resumo como isto, obrigado!!
Penso que isto clarificará muitas idéias sobre o ARCO. Grande emprego
Que grande correio. agradecimentos muito para isto. parece a uma boa coisa a fazer no fim de semana
looks like a good thing to do on the weekend
Uma coisa que não fui capaz de compreender ainda é como usar a expedição com o ARCO. Detalhes nesta pergunta de Excesso de Pilha:
http://stackoverflow.com/q/7858980/8427
Impressionante, Steffen! Grande sumário.
Eu tinha estado olhando para obter informações sobre formas lançadas uma ponte e a documentação Aplicar não tem praticamente nada sobre ele. Este artigo e as referências que você forneceu ajudaram muito.
Agradecimentos!
Andre
Que ‘Você não possa criar uma propriedade cujo nome começa com "o novo"’ bit não exatamente é verdade. Ver: http://stackoverflow.com/q/6327448/557219http://stackoverflow.com/q/6327448/557219
Isto está na Maçã Transitar para FORMAR ARCO Notas de Lançamento:
A conexão que você forneceu dá uma solução para este problema, por exemplo renomeando a propriedade de “newObject” a “theNewObject”.
Sim, eu disse a Maçã que a sua afirmação não realmente é verdade (há pelo menos duas outras inexatidões naquele documento).
Renomear a propriedade é uma solução, mas há duas outras soluções nas quais a propriedade não se torna renomeada: renomear o método de obtentor, e especificar uma família de método diferente do método de obtentor. Estas duas soluções permitem usar uma propriedade cujo nome começa com novo. These two solutions allow using a property whose name starts with new.
“Por exemplo, LLVM 3.0 é capaz agora de descobrir alguma “tabela potencial fora de limites” questões graças ao projeto de SAFECode”
Um projeto tão bonito como SAFECode é, que não é o que está informando a tabela fora de avisos de limites. Isto é somente um aviso de clangor ordinário, e foi primeiro confiado aqui: http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20110214/038831.htmlhttp://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20110214/038831.html
Tentei usar as suas macros “Que descobrem em compilam vez se o ARCO for permitido”, mas parece-me que ele não trabalha propriamente.
"parece" e “não propriamente” são descrições terrivelmente inexatas do que está acontecendo. As macros definitivamente trabalham, uso-os em Kobold2D muito. Esteja seguro de definir as macros em um arquivo de cabeçada e importar aquela cabeçada nos arquivos originais onde você está usando as macros. Be sure to define the macros in a header file and import that header in the source files where you’re using the macros.
[...] ouvido sobre contagem de referência automática Objetiva-C (ARCO). E você leu sobre ele aqui e lá e cada onde. Mas você não está usando [...] But you’re not using [...]