vendredi 23 mars 2012

Ajouts CGAffineTransform

Comme vous le savez probablement, Apple fournit un tas de fonctionnalités pour la manipulation des objets dans l'espace 2D en utilisant CGAffineTransform. Curieusement, Apple ne vous fournit pas un moyen d'extraire l'échelle, de transformer et d'informations de rotation d'un CGAffineTransform et ils ne fournissent pas toute la fonctionnalité de cisaillement à tous.

Voici quelques fonctions supplémentaires en ligne que j'utilise. Cela ajoute la capacité d'extraire les valeurs des composants de l'CGAffineTransform et ajoute également la possibilité de créer et d'extraire des informations de cisaillement.

Comme toujours, ce code est libre d'utiliser sans restriction ni limitation, mais a aucune garantie. Si vous fixez un bug, n'hésitez pas à me le faire savoir sur le correctif afin que je puisse intégrer le correctif.

#ifndef __MCP_AFFINE_TRANSFORM_ADDITIONS__ #define __MCP_AFFINE_TRANSFORM_ADDITIONS__  #import <CoreGraphics/CoreGraphics.h>  #ifdef __cplusplus extern "C" { #endif  #define degreesToRadian(x) (M_PI * x / 180.0) #define radiansToDegrees(x) (180.0 * x / M_PI)  static inline CGAffineTransform CGAffineTransformMakeShear(CGFloat shearX, CGFloat shearY) {     return CGAffineTransformMake(1.f, shearY, shearX, 1.f, 0.f, 0.f); } static inline CGAffineTransform CGAffineTransformShear(CGAffineTransform transform, CGFloat shearX, CGFloat shearY) {     CGAffineTransform sheared = CGAffineTransformMakeShear(shearX, shearY);     return CGAffineTransformConcat(transform, sheared); } static inline CGFloat CGAffineTransformGetDeltaX(CGAffineTransform transform) {return transform.tx;}; static inline CGFloat CGAffineTransformGetDeltaY(CGAffineTransform transform) {return transform.ty;}; static inline CGFloat CGAffineTransformGetScaleX(CGAffineTransform transform) {return sqrtf( (transform.a * transform.a) + (transform.c * transform.c) );}; static inline CGFloat CGAffineTransformGetScaleY(CGAffineTransform transform) {return sqrtf( (transform.b * transform.b) + (transform.d * transform.d) );}; static inline CGFloat CGAffineTransformGetShearX(CGAffineTransform transform) {return transform.b;}; static inline CGFloat CGAffineTransformGetShearY(CGAffineTransform transform) {return transform.c;}; static inline CGFloat CGPointAngleBetweenPoints(CGPoint first, CGPoint second)  {     CGFloat dy = second.y - first.y;     CGFloat dx = second.x - first.x;     return atan2f(dy, dx); } static inline CGFloat CGAffineTransformGetRotation(CGAffineTransform transform) {     // No exact way to get rotation out without knowing order of all previous operations     // So, we'll cheat. We'll apply the transformation to two points and then determine the     // angle betwen those two points          CGPoint testPoint1 = CGPointMake(-100.f, 0.f);     CGPoint testPoint2 = CGPointMake(100.f, 0.f);     CGPoint transformed1 = CGPointApplyAffineTransform(testPoint1, transform);     CGPoint transformed2 = CGPointApplyAffineTransform(testPoint2, transform);     return CGPointAngleBetweenPoints(transformed1, transformed2); }      #ifdef __cplusplus } #endif      #endif 


Vive le Roi

Jeff Atwood de Coding Horror a un post intéressant aujourd'hui sur être un développeur pour l'écosystème d'Apple. Nous allons laisser de côté pour l'instant le fait que Jeff n'est pas et n'a jamais été un développeur d'Apple et est, en fait, un ardent promoteur de la pile de développement de Microsoft. Malgré cette lacune, j'ai l'habitude de profiter de la lecture d'horreur de codage. Je pense que Jeff est un gars intelligent qui a beaucoup à offrir au monde en termes de vision sur le développement logiciel.

But...

Aujourd'hui postulat de Jeff est ce tiers développeurs d'Apple «servir au bon plaisir du roi", qui est absolument vrai. Mais, il termine son post en disant qu'il ne serait jamais de développer pour les magasins Apple App raison de la chance "d'être jeté sous un bus» par Apple. Juste assez, nous avons tous différents niveaux de tolérance pour les choses, et son hypothèse ici est essentiellement correcte. Les développeurs d'Apple courent un risque d'avoir d'Apple en concurrence directe avec nous si notre produit est assez réussi. Il arrive, peut-être, à 0,01% d'entre nous, mais cela arrive.

Je veux courir avec la métaphore de Jeff un peu, mais d'abord, j'ai besoin pour répondre à un couple de points dans son article.

Le premier point que je veux parler est son affirmation que si Microsoft était jamais faire quelque chose d'aussi audacieux que la libération d'un produit avec les mêmes caractéristiques que l'un de leurs développeurs tiers
... Les développeurs seraient criant assassiner de sang et des émeutes dans la, euh, les blogs et les forums Internet.

Attendez ... quoi? Excusez-moi? Qu'est-ce le genre d'enfer monde fantastique t-on avoir à vivre dans de penser que Microsoft ne prend pas, ne serait pas, et n'a pas en concurrence avec leurs propres développeurs tiers. Microsoft fait pratiquement un sport de celui-ci dans les années nonante, et a continué à le faire depuis lors, bien que moins odieusement. Je veux dire, avons-nous oublié que Microsoft a été condamné par les États-Unis et l'Union européenne d'abuser de leur pouvoir de monopole pour concurrence déloyale. Microsoft a utilisé d'utiliser systématiquement leur pouvoir de marché pour mettre les sociétés de logiciels plus petits hors de l'entreprise afin d'acquérir le contrôle d'un créneau particulier de l'industrie du logiciel.

Et quelles ont été les tiers développeurs de Microsoft font à l'époque? Crier assassiner de sang?

Nope.

Ils défendaient de Microsoft, et c'est compréhensible. La main qui nourrit et tout ça. Ceux développeurs savaient que d'être assimilé par Microsoft, ou injustement affrontées par Microsoft, avait des risques de faire des affaires dans ce marché particulier et ils le valent bien le risque, beaucoup la façon dont les développeurs iOS faire aujourd'hui avec Apple.

Le deuxième point que je pense doit être faite est hypothèse implicite Atwood que parce que Marco Arment n'est pas dans les bras au cours de Safari Liste de lecture fonctionnalité (qui duplique beaucoup de Instapaper"Caractéristiques s), et n'est pas rodomontades à qui veut l'entendre que cela signifie qu'il est« un fidèle sujet du roi ". L'implication étant que Marco va mettre en place avec tout traitement que Apple choisit de bomber dehors, peu importe comment injuste, parce qu'il est un bon garçon à fouetter.

Qui est une caractérisation totalement inexacte.

Je ne sais pas Marco personnellement, mais il est l'un des très peu de gens je suis sur Internet qui a toujours rencontré comme un adulte. Marco savait que Obtenir sherlocked avait un risque il a fait face en participant à l'écosystème d'Apple et a décidé qu'il valait le risque. Lorsque ce risque devient réalité, il a accepté les conséquences comme un grand. N'importe qui pouvait condamner un homme pour agir mûrement devrait être appelé pour lui, et c'est exactement ce que Jeff est fait ici. La réponse de Marco à la fonction de liste de lecture a été rien de moins que remarquable.

Géographie virtuel


Maintenant, retour à la métaphore originale de Jeff d'écosystèmes App pays. Parlons un peu du Royaume d'Apple et aussi sur les pays voisins où, en tant que marchand, vous pouvez choisir de colporter vos produits si les termes du Roi ne sont pas acceptables pour vous.

Le Royaume d'Apple


Comme noté Atwood, le Royaume d'Apple est une monarchie, gouvernée par un roi. De l'aveu même de Jeff, ce roi est un roi bénigne, la prise de décisions qu'il se sent mieux pour ses citoyens sont (les consommateurs). Il n'est pas parfait, mais en général ses décisions ont servi le peuple bien, et ils sont heureux et prospère. Le Royaume d'Apple a de belles routes pavées et un grand système de chemins de fer, et gérés par l'Etat des magasins à distance de marche chaque citoyen dans le pays. Le roi a invité les plus petits commerçants d'utiliser cette infrastructure pour vendre des marchandises en échange d'un petit pourcentage de leurs revenus et aussi longtemps que ces marchands suivre quelques directives que le roi a mis (et, certes, peut changer périodiquement) afin de s'assurer que ses citoyens ont une bonne expérience dans ses magasins.

Le Royaume d'Apple est grand, et ses citoyens sont assez aisés. Ils font régulièrement magasiner chez le Roi et de profiter d'acheter des choses là-bas. Même les commerçants sont minuscules trouver des façons de faire une vie confortable en étant en mesure d'atteindre tous les citoyens du pays. Bien sûr, pas tous les commerçants ont du succès. Même les meilleures routes et les magasins ne vont pas faire une entreprise mal gérée rentable ou amener les gens à acheter des produits gâtés, mais l'occasion est là pour tout celui qui veut vendre des marchandises à le faire avec une charge minimale et des coûts de démarrage.

Le roi, cependant, est aussi quelque chose d'un marchand lui-même, et parfois il se vendra à ses propres magasins. Il ne vend pas beaucoup, mais quand il le fait, parfois, il se vend le même type de produits que certains des marchands dans son royaume. Le roi, bien sûr, ne pas avoir à payer un pourcentage de ses revenus à utiliser les trains, les routes, ou les magasins, cependant. Dans ce cas encore plus rares, il va trouver un produit dans les magasins il aime tellement qu'il veut de lui fournir à tous ses citoyens gratuitement, ce qui rend impossible pour le commerçant d'origine pour vendre ce produit plus longtemps.

Maintenant, le Royaume d'Apple n'est pas le seul pays au monde, et le roi n'a pas empêcher quiconque d'émigrer ou, en fait, même d'exporter les produits vers d'autres pays. Avant de décider de plier bagage et aller dans un autre pays, vous devez vous assurer que votre destination va être mieux que là où vous êtes maintenant, nous allons donc regarder ces autres pays.

Androidistan

Le plus grand pays voisin est un immense pays appelé Androidistan. Androidistan n'a pas de roi, mais a plutôt des dizaines de gouvernements locaux et municipaux de divers types et de qualité. Leur système national de gouvernement est sans doute mieux décrit comme l'anarchie. Infrastructures Androidistan varie grandement d'une province à province, avec quelques routes et les trains étant libre pour quiconque d'utiliser, et d'autres exigeant le paiement. De nombreuses provinces ont leurs propres magasins, où n'importe qui peut vendre, mais il est difficile de trouver ce que vous voulez et la qualité de la marchandise est généralement sorte de pauvres, mais il existe des produits exceptionnels, si vous êtes prêt à les chercher. Malheureusement, il ya aussi des produits dangereux assis sur les étagères ainsi. Produisent empoisonnés et d'autres articles mortelle déguisé en marchandises légitimes.

Bien qu'il y ait beaucoup de gens dans Androidistan, la plupart d'entre eux n'aiment pas vraiment d'acheter des marchandises dans les magasins du gouvernement. Ils aiment aller et faire un repas des échantillons gratuits, mais la plupart n'aiment pas vraiment d'acheter effectivement rien et vol à l'étalage est endémique dans ces magasins. En fait, il est souvent beaucoup plus facile de voler un produit que de l'acheter légitimement car la plupart des magasins ne sont pas très bien géré.

La plupart des commerçants ont constaté qu'ils ne peuvent pas faire assez d'argent de vendre leurs marchandises sur les marchés Androidistan, donc ils ont essayé de placer des autocollants sur leurs produits publicitaires d'autres produits. Certains marchands font une vie vraiment bien faire cela, mais beaucoup d'autres sont même pas couvrir leurs coûts.

Windowsland


De l'autre côté du Royaume d'Apple est le pays relativement grand de Windowsland. Windowsland était autrefois prospère et a une quantité énorme de l'industrie, mais le pays stagne un peu, durant le déménagement récent vers plus petits commerçants. Le gouvernement a récemment commencé à mettre à jour leur infrastructure et les magasins de bâtiment modélisé après ceux du Royaume d'Apple. Windowsland a lancé une campagne publicitaire lourde essayer d'obtenir des marchands de vendre leurs marchandises.

Malgré une infrastructure de grande et propre, lumineuses des magasins, Windowsland a été d'avoir un succès limité dans le déplacement de l'âge moderne des petits commerçants. Leur grande industrie est encore très bien, cependant, et dans le long terme, susceptible de leur magasins vont commencer à faire une bonne affaire. Un jour.

Oh, avons-nous mentionné que Windowsland est également dirigé par un roi? Il charge le même revenu pour cent à utiliser ses voies ferrées, routes, et les magasins, mais a placé moins de restrictions sur ses commerçants dans une tentative pour attirer les vendre dans son pays. Windowsland est un endroit assez agréable, mais il n'est tout simplement pas tout ce que beaucoup de gens vont encore dans leurs magasins.

La République démocratique du WebOS


Ce petit pays a un potentiel énorme, mais la mauvaise gestion et l'ineptie des dernières ont essentiellement fermées tomber le gouvernement. Il ya un peu de citoyens errant dans les rues encore un peu hébété, mais la plupart ont quitté pour un meilleur terme des pays.

L'oligarchie Blackberry


L'oligarchie Blackberry, qui a fait deux rois, est allé dans une génération de puissance mondiale prospère pays du tiers monde à cause de son incapacité à changer ses manières. Les citoyens ont quitté ce pays à un rythme alarmant et les citoyens restants ont peu de foi que leur paire de rois sera en mesure de régler les problèmes étant donné les fréquentes coupures d'électricité et d'infrastructures en décomposition.

Il existe plusieurs autres petits pays périphériques de mobileworld, mais ces cinq à peu près couvrir les principaux marchés que les commerçants voudraient vendre sur.

Epilogue


Les métaphores sont faciles à étirer à un point qu'ils n'ont plus de sens, et je doute franchi la ligne quelques paragraphes en arrière, mais le point est ceci: tous les écosystèmes ont leurs avantages et leurs inconvénients. Dans les vieux jours de logiciels en boîte, au lieu d'un seul roi bénigne, vous avez eu à faire face à une douzaine de tyrans (chaînes logicielles) pour obtenir vos marchandises sur le plateau, et ils ont pris plus de la moitié du prix de vente en échange. Si vous ne voulez pas avoir affaire avec eux, vous pourriez plutôt choisir de travailler à travers un distributeur qui a pris une autre grande partie de votre revenu brut en échange pour faire face aux tyrans, en votre nom.

Dans chaque marché à chaque fois le risque de concurrence d'un concurrent plus gros, plus riche a existé.

Une partie de l'argument de Margaret Atwood est que même les monarchies bien peut aller mal. Bien sûr qu'ils le peuvent. Alors peut bonnes démocraties. Prenons ce que Apple pourrait être un jour sur la table. Nous ne pouvons pas les gens faute de ne pas en scène une révolution avant il ya une vraie raison de se révolter.

Que vous le fassiez explicitement ou non, se lancer en affaires signifie que vous êtes d'accepter certains risques afin d'obtenir certaines récompenses. Lorsque de mauvaises choses arrivent dans les affaires - lorsque des risques (prévus ou non) se transforment en problèmes réels - à agir comme une période de douze ans et de pleurnicher à l'Internets ne pas rendre les choses meilleures. Vous remonter le moral, trouver un moyen de le réparer, ou passer à autre chose.

Donc, ouais. Nous développeurs Apple servent au bon plaisir de notre Roi, et nous le savons. En échange, nous avons accès à des millions de citoyens qui veulent acheter nos produits. Un petit pourcentage d'entre nous finira en concurrence directe avec notre roi à certains moments, mais dans l'ensemble, la vie est assez bonne dans le Royaume d'Apple pour nous les commerçants.

Et, tandis que nous serions heureux de vous compter parmi nos rangs, Jeff, vous êtes plus que bienvenus pour emballer votre équipement et de passer à un pays voisin si vous pensez que la vie serait mieux pour vous là-bas.

Décevante

So, comme les autres, J'ai été tenté d'écrire une défense de l'iPhone 4S, après tous les experts et les opposants est sorti la semaine dernière appelant l'iPhone 4S "décevant". Je suis content que je n'ai jamais trouvé le temps. Comme il s'avère que les iPhone 4s n'a besoin de personne à se lever pour lui.

1.000.000 téléphones vendus le premier jour de pré-commandes. C'est 400 000 de plus que l'iPhone 4.

Et c'est sans compter le nombre qui se vendra le 14 Octobre quand ils arrivent dans les magasins Apple dans 7 pays.

Il ya aussi un lot important de pays qui ne reçoivent pas le téléphone jusqu'au 28 Octobre, et un plus énorme de 40 pays (dont la Chine, où de nouveaux Apple Stores ont été fracassant des records de vente ces derniers temps) qui ne sera pas obtenir l'iPhone 4s avant un certain temps en Décembre.

Ouais. Décevant. Vous les gars dans les médias s'assurer que l'on cloue.

Respect & Shame

Il a été fascinant de voir combien de personnes ont répondu à la mort de Steve Jobs exactement comme je le faisais. C'est vraiment étonnant de voir combien les gens qui n'ont jamais rencontré l'homme se sentent pas seulement que le monde a perdu quelqu'un d'important, mais qu'ils ont eux-mêmes perdu un ami.

Audition d'autres d'exprimer exactement ce que je ressens? Elle aide. Et, pour la plupart, les médias ont été là avec nous, répondant à la mort de Steve en se concentrant sur son impact et le bien qu'il a fait.

J'espère vraiment voir combien la vie des gens qu'il a touché aide familiale et les amis de Steve passer au travers.

Mais pas tous les médias ont choisi de se concentrer sur les bons. Je ne vais pas tout lien vers des articles réels, mais Gawker et le New York Times dessus une courte liste des médias qui ont choisi de se concentrer sur les failles de Steve et de se lever et crier à qui veut l'entendre que Steve était. .. bien ... humain. Imperfect. Imparfait.

Il ya une coutume dans la société moderne qui est souvent appelé «le respect pour les morts". Il n'a rien à voir avec les morts. Les morts ne se soucient pas ce que vous dites à leur sujet. Il s'agit de la vie qui se souciait de la mort, et ils do. C'est parce qu'ils se soucient que le deuil est un processus difficile. Douloureux. Sad. Ce n'est pas un moment où vous voulez rappels des défauts de la personne dont l'absence vous essayez de composer avec.

Aucun être humain avec avec une once d'empathie ou de la décence choisit de critiquer publiquement le récemment disparu, célèbre ou non, indépendamment de comment ils se sentaient à leur sujet. Le faire est un acte de cruauté. C'est blessant. Little. C'est dur de coups de pied les gens quand ils sont déjà aussi bas qu'ils peuvent être.

Pour ceux, comme moi, qui prennent soin, mais ne savait pas Steve Jobs personnellement, des gens comme ça sont une nuisance. Ils sont juste une autre crasse, gueule Classless Internet odieux que nous avons à faire un effort pour ignorer.

Mais pour la famille de Steve, ses amis et collègues ... les personnes qui really le connaissais, c'est un enfer de beaucoup plus que cela. Cela me brise le cœur de penser qu'ils pourraient lire ces articles.

Honte à vous, le New York Times. Vous êtes mieux que ça. Honte à vous, Gawker. Vous should mieux que cela.

Sad Mac

Sad mac

Je n'ai pas eu beaucoup de temps pour bloguer ces derniers temps. J'ai environ une demi-douzaine de messages écrits inachevés dans mon attente, mais ont été trop occupé pour terminer l'un d'eux.

Une des choses pour me tenir occupé en ce moment est un travail pour Apple grâce MartianCraft. Ce travail, à bien des égards, est un rêve devenu réalité pour moi, comme je voulais travailler pour Apple depuis des années et jamais il a réussi.

J'ai commencé à programmer sur un Apple] [+ en 1980 et Apple a été une partie de ma vie depuis lors. Je n'ai pas besoin de regarder plus loin que le bureau, je suis assis à rendre compte à quel point ma vie a été touchée par cette société appelée Apple a commencé dans un garage par deux mecs nommé Steve. Je gagne ma vie en utilisant des produits d'Apple et de développement pour les produits Apple, mais plus important encore, ma vie est meilleure à cause de leurs produits.

J'ai pris quelques heures loin de mon bureau ce soir et retourné aux nouvelles de la mort de Steve Jobs. Je suis revenue à des nouvelles qui littéralement senti comme un coup de pied dans l'estomac. Et je veux dire littéralement. J'ai mal au ventre.

Il semble étrange de se sentir ainsi sur un homme je n'ai jamais rencontré. J'ai seulement une fois été plus proche de Steve Jobs que la section avant du Moscone Ouest ou Nord, et c'est là que j'ai accidentellement renversé sur lui sur le plancher du salon MacWorld à un an. Mais je me sens comme un vieil ami est mort. Je suis retenant ses larmes, et peut-être je devrais avoir honte de cela.

Mais je ne suis pas.

Steve est mort beaucoup trop jeune. Je pense que quelques larmes sont dans l'ordre.

Code de session en ligne pour les gros objets (Plus un avertissement)

Dans le chapitre 9 du Développement Plus pour iPhone, Nous avons écrit un ensemble de classes qui imitait le comportement des GameKit peer-to-peer connectivité, mais pour les connexions réseau régulier (fonctionne uniquement avec GameKit connexions Bluetooth et réseau local). Fondamentalement, nous avons écrit une classe qui vous permet d'envoyer et de recevoir tout ce qui peut être emballé dans une instance de NSData. Comme il est relativement trivial à mettre en œuvre pour la plupart des classes de NSCoding, cela signifie passer des objets entre les apps iOS deux (ou une iOS et une application Mac) devient assez facile. Vous n'avez pas d'interroger les données, ou de s'inquiéter de chunking les données. Vous avez juste faire un appel de méthode et passer une instance NSData pour envoyer des données, puis mettre en œuvre une méthode déléguée pour recevoir des données de retour de l'autre extrémité. La vie est belle, non?

Hmm...

Peut-être pas. Il ya une limitation assez grand dans la mise en œuvre du livre. C'est la mise en oeuvre, conçu pour passer des petits paquets de données (se déplace jeu TicTacToe), tout conservé en mémoire. Si vous essayez d'envoyer une image de bonne taille à la connexion d'autres, probablement vous à court de mémoire assez rapidement.

Il ya quelque temps, j'ai été confronté exactement à cette situation. Pour une application kiosque qui MartianCraft a été écrit pour un client, j'ai eu besoin d'envoyer de grandes images prises avec un appareil photo reflex numérique à partir d'un programme Cocoa de Mac à un programme d'iPad et aussi nécessaire pour envoyer des photos prises avec l'appareil de l'iPad est de retour à l'application Mac Cocoa. Ces images, comprimé, variait d'environ un à environ cinq megs. J'ai attrapé la classe à partir OnlineSession More, En pensant, j'ai eu le code réseau essentiellement fait, et regardé ma demande de descendre dans un flamboiement de ... bien ... pas la gloire, c'est sûr. Non seulement l'iPad à court de mémoire, il a manqué de mémoire rapide ... beaucoup plus vite que prévu. Même l'envoi des images plus petites caméras iPad souvent causé peu de mémoire se bloque.

Il y avait deux problèmes fondamentaux avec la classe OnlineSession lorsque vous essayez de l'utiliser pour l'envoi de gros volumes de données. Tout d'abord, comme j'ai dit, c'est qu'il s'appuyait uniquement sur la mémoire physique. Étant donné que les limites physiques de l'iPad d'origine, ce fut problématique. Mais il y avait un autre problème, beaucoup plus grand.

Le deuxième problème était que pendant le processus de chunking les données à envoyer, le code a continué à faire des copies inutiles des données. Dit simplement, j'ai fait une erreur n00b. L'erreur n'a pas d'impact de l'application TicTacToe parce que le jeu serait se déplace facilement dans le tampon d'émission, mais c'est une erreur que j'ai faite avant et devrait définitivement avons connu mieux.

Alors, quoi, précisément, a été cette erreur, demandez-vous?

L'utilisation régulière de NSData dataWithBytes constructeur de commodité: longueur: lors de la création de la nouvelle instance NSData pour stocker la partie de l'image qui ne s'insère pas dans le tampon d'émission. Si vous lisez la description de dataWithBytes: longueur: il dit très clairement que cela fait une copie des données que vous fournissez. Donc, chaque fois qu'un paquet a été envoyé, le code serait de créer une nouvelle instance NSData pour tenir le reste qui ne rentrait pas dans le tampon, et il serait copier toutes les données non envoyés restantes pour chaque paquet. Ouch.

Donc, comme un exemple simple, si nous devions envoyer une image 5 meg, et le tampon d'émission a été fixé à 128k, le code serait de faire une copie 4,825 meg après le premier paquet a été envoyé, puis une copie de 4.75 meg, après le deuxième paquet a été envoyé, une copie de 4,265 meg après le troisième paquet, et ainsi de suite. Après chaque paquet, une autre copie légèrement plus petit des données a été faite. Une progression descendante qui mangent mémoire rapide.

Après beaucoup de jurons à moi, j'ai fait quelques modifications de la classe de faire deux choses.

Tout d'abord, je suis passé à l'aide de dataWithBytes NSData: NoCopy: longueur: qui utilise les données fournies en place sans faire de copie. Ce gardé l'empreinte mémoire beaucoup plus petit. Dans certains cas, car les images DSLR ont été si grande et si notre application nécessaire pour envoyer tant d'années, j'ai toujours rencontré des problèmes de mémoire. Ainsi, la deuxième chose que j'ai faite a été d'ajouter la mise en cache système de fichiers de la file d'attente sortante afin que tous les objets codés en attente d'être envoyés n'ont pas eu à tenir en mémoire pour l'application de fonctionner correctement.

La nouvelle version des fonctions de classe exactement comme celle de la livre, alors vous devriez être capable de tout rendez-remplacer les OnlineSession du chapitre 9 avec celui-ci sans apporter aucune modification à votre code d'application.

Vous pouvez télécharger la nouvelle version ici.

Travailler pour MartianCraft

Si vous avez raté mes tweets plus tôt cette semaine, MartianCraft cherche à ajouter un peu de développeurs. Nous recherchons pour un couple de développeurs expérimentés, et sont également penser à apporter dans un ou deux d'entrée de gamme devs sans expérience significative à être formés.

Initialement, le travail serait axée sur les projets traitance et commencerait à la fin août. Conversion à temps plein est une possibilité, mais pas tout de suite.

Si vous êtes intéressés à être considérés, envoyez un e-mail avec une expérience de travail pertinente et / ou r'esum'e / CV work@martiancraft.com.