Pregunta

Fondo

Soy un desarrollador que está a punto de crear una aplicación para Mac. Estoy a punto de poner mis manos en Snow Leopard. Hasta ahora he estado construyendo sobre Leopard. Solo he estado haciendo el desarrollo de Cocoa durante aproximadamente un año, no muy intensamente.

He leído mucho sobre Snow Leopard y Grand Central Dispatch en particular. Soy consciente de que utiliza bloques, pero no me he metido en la cuestión de cómo funcionan los bloques o cómo funciona Grand Central Dispatch.

Mi pregunta

¿Cómo puedo desarrollar mejor una base de código tanto para Snow Leopard como para Leopard, mientras aprovecho al máximo el nuevo material de subprocesos múltiples en Snow Leopard?

NSOperationQueue

Mi instinto no es lidiar con GCD directamente en mi código, pero cuando las cosas se deben poner en una cola, use NSOperationQueue, ya que he leído de Mike Ashes Q & amp; A sesiones que en Snow Leopard, NSOperationQue aprovecha al máximo GCD y el accidente que descubrió en Leopard ahora se han solucionado.

Gestión manual de subprocesos

Sin embargo, cuando se trata de administrar subprocesos de fondo específicos, ¿hay alguna forma de aprovechar las cosas de manejo de subprocesos más fáciles de usar en Snow Leopard sin romper cosas en Leopard? O, ¿recomendaría la gente que tengo diferentes objetivos para cada sistema operativo con algunas clases diferentes en cada uno? Esto me parece una pesadilla de mantenimiento esperando a suceder.

O tal vez debería vivir sin tener mi aplicación totalmente optimizada para Snow Leopard y seguir con + (void) detachNewThreadSelector: toTarget: withObject: o algo similar.

¿Qué piensa la gente?

¿Fue útil?

Solución

Tu impresión intestinal en GCD es correcta. De hecho, cualquier API que use bloques está fuera, a menos que condicione el código para que se ejecute solo en Snow Leopard. Eso tiene sentido si el código es compatible con características que solo están disponibles en Snow Leopard, pero si es una característica que también va a admitir en Leopard, también puede usar la ruta del código Leopard en todos los casos, agregando un Snow Leopard específico La ruta que no proporciona ninguna mejora visible para el usuario solo va a complicar su código y aumentar su sobrecarga de prueba.

Esto va especialmente para cosas como la gestión de hilos o GCD. Los cambios allí requieren una nueva arquitectura, no es simplemente:

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

En general, si los cambios son tan simples como Apple los maneja dentro de la clase sin cambiar la API. En otras palabras, la pregunta no es si puede usar el código de administración de subprocesos más fácil en Snow Leopard, sino por qué debería hacerlo cuando tenga que hacer la versión difícil para Leopard de todos modos. Una ruta de código adicional es una ruta de código adicional, y hasta que no pueda eliminar la compatibilidad de Leopard utilizando API significativamente diferentes en Snow Leopard (incluso si son más fáciles de usar que las de Leopard), solo es un trabajo adicional.

Pensaría si realmente quieres apuntar a Leopard. La adopción de Snow Leopard ha sido justa, Snow Leopard es una actualización barata y, debido a los cambios en la API, habrá una gran cantidad de presión hacia adelante sobre los usuarios de pequeños desarrolladores que realizan aplicaciones exclusivas de Snow Leopard. El único grupo de usuarios que permanecerá en Leopard durante mucho tiempo son aquellos que no son expertos en tecnología (quienes probablemente no instalen mucho software de terceros), y aquellos que aún usan PPC Mac (que no han comprado un nuevo Mac). en 3 años, así que probablemente no estén comprando mucho software). Si es una aplicación que cree que se enviará en 3 a 9 meses, diría que ir a Snow Leopard solo es probablemente una opción razonable y reducirá considerablemente su carga de desarrollo y pruebas.

Otros consejos

Una forma sería entender qué APIs en Leopard se han modificado en Snow Leopard para usar GCD. Por ejemplo, NSOperation y NSOperationQueue en Leopard funcionan como siempre lo han hecho. Sin embargo, en Snow Leopard, se han reescrito para aprovechar el GCD que se encuentra debajo. Voil & # 225 ;. Actualización instantánea para tus usuarios 10.6.

Otra opción sería usar algo como PLBlocks y compilar GCD en tu código . No tengo idea de si eso funcionará, pero podría valer la pena intentarlo. =)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top