Frage

Hintergrund

Ich bin ein Entwickler, der in den Wirren ist für den Mac eine Anwendung zu bauen. Ich bin über meine Hände auf Snow Leopard zu bekommen. Bis jetzt habe ich baut auf Leopard. Ich habe nur etwa ein Jahr lang nicht sehr intensiv tun Cocoa Entwicklung.

Ich habe viel über Snow Leopard und Grand Central Dispatch insbesondere lesen. Ich bin mir bewusst, dass es verwendet Blöcke, aber ich habe nicht in die Nitty Gritty von bekam, wie Blöcke arbeiten oder wie Grand Central Dispatch funktioniert.

Meine Frage

Wie kann ich am besten entwickelt eine Code-Basis sowohl für Snow Leopard und Leopard, während Vorteil für die meisten Grade möglich der neuen Multi-Threading Sachen in Snow Leopard zu nehmen?

NSOperationQueue

Mein Instinkt ist nicht mit GCD direkt in meinem Code zu tun, aber wenn die Dinge auf einer Queue müssen setzen, verwenden NSOperationQueue, da ich von Mike Ashes Q & A Sessions gelesen haben, die in Snow Leopard, NSOperationQueue alle Vorteile von GCD nimmt und die crasher er in Leopard entdeckt wurde nun behoben.

Hand Thread-Management

Allerdings, wenn es um die Verwaltung von bestimmten Hintergrund-Threads kommt, ist es eine Möglichkeit, die Vorteile der leichter zu nehmen Thread-Management-Sachen in Snow Leopard zu verwenden, ohne die Dinge in Leopard zu brechen? Oder würden die Menschen empfehle ich verschiedene Ziele für jedes Betriebssystem mit einigen verschiedenen Klassen in jeweils? Dies ist für mich scheint wie ein Alptraum in Sachen Wartung passiert nur darauf warten.

Vielleicht sollte ich einfach leben mit nicht meine app voll für Snow Leopard optimiert haben und halten mit +(void)detachNewThreadSelector:toTarget:withObject: oder etwas ähnliches.

Was denken die Leute?

War es hilfreich?

Lösung

Ihr Darm Eindruck auf GCD ist richtig. In der Tat, die jede API Blöcke verwendet wird, es sei denn Sie diesen Code konditionalisieren nur laufen auf auf Snow Leopard. Das macht Sinn, wenn der Code-Funktionen zu unterstützen, die auf Snow Leopard nur verfügbar sind, aber wenn es sich um eine Funktion, die Sie auch auf Leopard geht zu unterstützen, dann kann man auch nur den Pfad Leopard-Code verwenden in allen Fällen das Hinzufügen eines Snow Leopard spezifischen Pfad, der keine sichtbare Verbesserung für den Benutzer bereitstellt wird nur den Code erschweren und Ihren Testaufwand zu erhöhen.

Dies gilt vor allem für Dinge wie Thread-Management oder GCD. Änderungen gibt es erhebliche Re-Architektur erfordert, ist es nicht einfach:

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

In der Regel, wenn die Änderungen sind, dass einfache Apple-behandelt sie innerhalb der Klasse, ohne die API zu ändern. Mit anderen Worten, ist die Frage nicht, ob Sie den einfachen Thread-Management-Code in Snow Leopard nutzen können, ist es, warum sollen Sie, wenn Sie auf die harte Version für Leopard tun sowieso gehen zu müssen. Ein zusätzlicher Codepfad ist ein zusätzlicher Codepfad, und bis Ihnen Leopard-Unterstützung mit deutlich unterschiedlichen APIs auf Snow Leopard fallen können (auch wenn sie leichter sind als die Verwendung von Leopard) ist nur zusätzliche Arbeit.

Ich würde darüber nachdenken, ob Sie wirklich Leopard ausrichten möchten. Snow Leopard Annahme war ziemlich, ist Snow Leopard eine günstige Upgrade, und wegen der API-Änderungen wird es von kleinen Entwicklern viel Druck nach vorne auf Benutzer sein nur tun Snow Leopard apps. Die einzige Gruppe von Benutzern, die auf Leopard für eine lange Zeit bleiben werden sind diejenigen, die technisch nicht versierte sind (die sind unwahrscheinlich viel 3rd-Party-Software installieren), und diejenigen, die noch PPC-Macs mit (die keine neuen Mac gekauft haben, in 3 Jahren, kauft so wahrscheinlich nicht viel Software). Wenn es eine App, die Sie denken, in 3-9 Monaten versenden wird ich würde behaupten, dass nur gehen Snow Leopard ist wahrscheinlich eine vernünftige Option und wird erheblich reduzieren auf Ihrem Entwicklungs- und Testaufwand.

Andere Tipps

Eine Möglichkeit wäre, zu verstehen, was APIs in Leopard hat in Snow Leopard geändert worden GCD zu verwenden. Zum Beispiel NSOperation und NSOperationQueue in Leopard arbeiten, wie sie schon immer so. Doch in Snow Leopard, sie habe neu geschrieben unter Vorteil von GCD zu nehmen. Voilá. Instant-Upgrade für Ihre 10.6 Benutzer.

Eine andere Möglichkeit wäre, etwas zu verwenden, wie PLBlocks und kompilieren GCD in den Code selbst . Ich habe keine Ahnung, ob das wird funktionieren, aber es könnte einen Versuch wert sein. =)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top