Domanda

Sfondo

Sono uno sviluppatore alle prese con la creazione di un'applicazione per Mac. Sto per mettere le mani su Snow Leopard. Fino ad ora ho costruito su Leopard. Faccio lo sviluppo del cacao da circa un anno non molto intensamente.

Ho letto molto su Snow Leopard e Grand Central Dispatch in particolare. Sono consapevole del fatto che utilizza i blocchi, ma non mi sono ancora preoccupato di come funzionano i blocchi o di come funziona Grand Central Dispatch.

La mia domanda

Come posso sviluppare al meglio una base di codice sia per Snow Leopard che per Leopard, sfruttando al massimo il livello possibile delle nuove cose multi threading in Snow Leopard?

NSOperationQueue

Il mio istinto non è quello di gestire GCD direttamente nel mio codice, ma quando le cose devono essere messe in coda, usa NSOperationQueue, poiché ho letto da Mike Ashes Q & amp; A sessioni che in Snow Leopard, NSOperationQueue sfruttano appieno GCD e il crasher che ha scoperto in Leopard sono stati corretti.

Gestione manuale dei thread

Tuttavia, quando si tratta di gestire specifici thread in background, c'è un modo per trarre vantaggio dalle cose più facili da usare per la gestione dei thread in Snow Leopard senza rompere le cose in Leopard? O le persone raccomanderebbero di avere obiettivi diversi per ciascun sistema operativo con alcune classi diverse in ciascuno? Questo per me sembrerebbe un incubo di manutenzione che aspetta solo che accada.

O forse dovrei semplicemente vivere senza avere la mia app ottimizzata completamente per Snow Leopard e rimanere con + (vuoto) detachNewThreadSelector: toTarget: withObject: o qualcosa di simile.

Cosa pensa la gente?

È stato utile?

Soluzione

La tua impressione viscerale su GCD è corretta. In effetti, qualsiasi API che utilizza i blocchi è fuori uso, a meno che tu non abbia condizionato quel codice per essere eseguito solo su Snow Leopard. Ciò ha senso se il codice supporta funzioni che sono disponibili solo su Snow Leopard, ma se è una funzionalità che supporterai anche su Leopard, puoi anche utilizzare il percorso del codice Leopard in tutti i casi, aggiungendo un Snow Leopard specifico il percorso che non fornisce alcun miglioramento visibile all'utente sta solo complicando il codice e aumentando il sovraccarico del test.

Questo vale soprattutto per cose come la gestione dei thread o GCD. I cambiamenti lì richiedono una significativa ri-architettura, non è semplicemente:

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

In generale, se le modifiche sono così semplici, Apple le gestisce all'interno della classe senza modificare l'API. In altre parole, la domanda non è se è possibile utilizzare il codice di gestione thread più semplice in Snow Leopard, è perché dovresti comunque fare la versione definitiva per Leopard. Un percorso di codice aggiuntivo è un percorso di codice aggiuntivo e fino a quando non è possibile eliminare il supporto Leopard utilizzando API significativamente diverse su Snow Leopard (anche se sono più facili da usare rispetto a Leopard) sono solo un lavoro extra.

Penserei se vuoi davvero prendere di mira Leopard. L'adozione di Snow Leopard è stata abbastanza, Snow Leopard è un aggiornamento economico e, a causa delle modifiche alle API, ci sarà molta pressione in avanti sugli utenti di piccoli sviluppatori che fanno solo app Snow Leopard. L'unico gruppo di utenti che rimarrà su Leopard per lungo tempo sono quelli che non sono tecnicamente esperti (che è improbabile che installino molto software di terze parti) e quelli che usano ancora i Mac PPC (che non hanno acquistato un nuovo Mac tra 3 anni, quindi probabilmente non comprerai molto software). Se si tratta di un'app che pensi verrà spedita in 3-9 mesi, direi che andare solo Snow Leopard è probabilmente un'opzione ragionevole e ridurrà notevolmente il tuo carico di sviluppo e test.

Altri suggerimenti

Un modo sarebbe quello di capire quali API in Leopard sono state modificate in Snow Leopard per usare GCD. Ad esempio, NSOperation e NSOperationQueue in Leopard funzionano come sempre. Tuttavia, in Snow Leopard, sono stati riscritti per sfruttare GCD sottostante. Voil & # 225 ;. Upgrade istantaneo per i tuoi utenti 10.6.

Un'altra opzione sarebbe quella di utilizzare qualcosa come PLBlocks e compilare GCD nel tuo codice . Non ho idea se funzionerà, ma potrebbe valere la pena provare. =)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top