Pergunta

Fundo

Eu sou um desenvolvedor que está em vias de criar um aplicativo para o Mac. Estou prestes a chegar em minhas mãos Snow Leopard. Até agora eu tenho vindo a construir no Leopard. Eu só estive fazendo o desenvolvimento de cacau por cerca de um ano não muito intensamente.

Eu li muito sobre o Snow Leopard e do Grand Central Dispatch, em particular. Estou ciente de que ele usa blocos, mas eu não entrou no âmago da questão de como blocos de trabalho ou como o Grand Central Dispatch funciona.

Minha pergunta

Como faço para melhor desenvolver uma base de código tanto para Snow Leopard e Leopard, enquanto aproveitando ao possível maior grau do novo material multi threading no Snow Leopard?

NSOperationQueue

Meu instinto é não lidar com GCD diretamente no meu código, mas quando as coisas precisam colocar em uma fila, utilize NSOperationQueue, desde que eu tenha lido a partir sessões Mike Ashes Q & A que no Snow Leopard, NSOperationQueue tira proveito da GCD e o crasher ele descobriu no Leopard foi agora corrigido.

Manual de Gestão de rosca

No entanto, quando se trata de gerir threads em segundo plano específicas, há alguma maneira de aproveitar o mais fácil de usar coisas gerenciamento de threads no Snow Leopard sem quebrar coisas no Leopard? Ou será que as pessoas recomendam que tenho diferentes metas para cada sistema operacional com algumas classes diferentes em cada um? Isso para mim parece como um pesadelo de manutenção apenas esperando para acontecer.

Ou talvez eu deva apenas ao vivo com não ter meu aplicativo totalmente otimizado para o Snow Leopard e ficar com +(void)detachNewThreadSelector:toTarget:withObject: ou algo similar.

O que as pessoas pensam?

Foi útil?

Solução

Sua impressão intestino em GCD está correto. Na verdade, qualquer API que bloqueia usa é para fora, a menos que você conditionalize que o código seja executado em apenas no Snow Leopard. Isso faz sentido se o código é a recursos de apoio que estão disponíveis apenas no Snow Leopard, mas se é uma característica que você também vai apoiar no Leopard assim como você pode simplesmente usar o caminho de código de Leopard em todos os casos, a adição de um específico Snow Leopard caminho que não fornece qualquer melhoria visível para o usuário está indo só para complicar o seu código e aumentar a sua sobrecarga de teste.

Isso vale especialmente para coisas como gerenciamento de threads ou GCD. Alterações não exigem arquitetura significativa re, não é simplesmente:

if (snowLeopard) {
  [NSSnazySnowLeopardClass doSomething];
} else {
  [NSBoringLeopardClass doSomethingEquivalent];
}

Em geral, se as mudanças são tão simples alças da Apple-los dentro da classe sem alterar a API. Em outras palavras, a questão não é se você pode usar o código de gerenciamento de threads mais fácil no Snow Leopard, é por que você quando você está indo para necessidade de fazer a versão difícil para Leopard qualquer maneira. Um caminho de código extra é um caminho de código extra, e até que você pode soltar apoio Leopard usando significativamente diferentes APIs no Snow Leopard (mesmo se eles são mais fáceis de usar do que o Leopard) são apenas trabalho extra.

Gostaria de pensar se você realmente quer Leopard-alvo. adoção Snow Leopard tem sido bastante, o Snow Leopard é um upgrade barato, e por causa da API muda haverá muita pressão para a frente em usuários de pequenos desenvolvedores fazendo Snow Leopard apenas aplicações. O único grupo de usuários que vão ficar no Leopard por um longo tempo são aqueles que não são tecnicamente mais experiente (que não são susceptíveis de instalar muito 3ª software festa), e aqueles que ainda usam PPC Macs (quem ainda não comprou um novo Mac em 3 anos, então provavelmente não estão comprando muito software). Se ele é um aplicativo que você acha que vai ser lançado em 3-9 meses eu diria que vai Snow Leopard única é provavelmente uma opção razoável e irá reduzir grandemente no seu desenvolvimento e carga testando.

Outras dicas

Uma forma seria a de entender o que APIs em Leopard foram modificados no Snow Leopard para uso GCD. Por exemplo, NSOperation e NSOperationQueue no trabalho Leopard como sempre fizeram. No entanto, no Snow Leopard, que já foi reescrito para aproveitar GCD por baixo. Voilá. atualização instantânea para seus usuários 10.6.

Outra opção seria usar algo como PLBlocks e compilação GCD em seu código-se . Eu não tenho idéia se isso vai funcionar, mas pode valer a pena um tiro. =)

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