Avant de rouler ma propre file d'attente forte> en utilisant nsmutableArray code>, j'aimerais savoir s'il y a quelque chose de plus standard disponible. Je ne vois rien dans les documents Apple, mais je serai surpris s'il n'y a pas une implémentation de la file d'attente de quelque part que les gens utilisent. Java me gâte! P>
6 Réponses :
Mise en œuvre d'une file d'attente basée sur EDIT: P> trouvé avec une recherche rapide de Google: p> NsmutableArray code> est assez facile, il est probablement moins de 50 lignes de code.
+1 J'ai nettoyé le code formatant un TAD et la méthode -ToueObject.
ajoutez une [version d'objets] sur votre distributeur de distribution et je vais vous donner un +1
Une meilleure implémentation serait une liste liée. Avec une liste liée, vous pouvez optimiser le temps passé à faire chaque opération à O (1). Avec NsmutableRayRay, vous avez une opération O (n) pour chaque TakeObject (RetirObjectAindex changera tous les éléments).
Manquer A {Pour ouvrir le bloc pour TakeObject. Belle réponse, cependant :) Merci!
Cocoa elle-même n'a pas de classe de file d'attente et il n'y a pas de standard en soi, mais il existe plusieurs options, dont l'une peut mieux adapter vos besoins. Voir cette question (et My Réponse ). P>
Comme vous l'avez dit, vous pouvez rouler votre propre utilisation de NsmutableArray. Si vous avez juste besoin d'une file d'attente Quick'n'Dirty (et ne vous inquiétez pas de la copie, de l'encodage / décodage, de l'énumération, etc.), la solution @matt suggère est une approche facile. Vous devriez également envisager Ajout de méthodes de file d'attente à NsmutableArraRay code> via une catégorie
, qui est agréable dans ce Votre «file d'attente» est également un tableau (vous pouvez donc le transmettre pour les paramètres Nsarray) et vous obtenez toutes les fonctionnalités de réseau NS (mutable) gratuitement. P>
Si la performance est importante, je recommande d'utiliser une structure plus idéalement adaptée à la suppression du premier élément. J'ai écrit Chcircularbufferqueur pour mon propre cadre pour cette raison même. (Ne pas essayer de toot ma propre corne, essayant juste de sauver les autres quelque temps.) P>
J'ai fabriqué une catégorie contenant uniquement la méthode deque, basée sur le code de ponts mat.
@interface NSMutableArray (ShiftExtension) // returns the first element of self and removes it -(id)shift; @end @implementation NSMutableArray (ShiftExtension) -(id)shift { if([self count] < 1) return nil; id obj = [[[self objectAtIndex:0] retain] autorelease]; [self removeObjectAtIndex:0]; return obj; } @end
Vous pouvez utiliser la file d'attente STL à partir de la bibliothèque standard C ++. P>
J'ai trouvé l'objectif C ++ d'avoir des problèmes avec des itérateurs dans Xcode9 (9.2). Les itérateurs pour cartes ne détectent pas la carte -> fin () correctement dans le scénario que j'ai rencontré. Je minimiserais les utilisations de C ++ STL dans le code IOS pur et essayez de garder C ++ à interfacer des couches d'interface avec API C ++. Une autre complication du code C ++ sera une gestion de la mémoire car ARC ne traite pas d'objets C ++. Ce n'est pas un bouchon de spectacle, mais quelque chose à garder à l'esprit si vous êtes habitué à nettoyer à l'arc pour vous.
Découvrez le File d'attente prioritaire STL . Il nécessite zéro des lignes de code et elle est portable! Que voulez-vous de plus? P>
Vous pouvez utiliser la méthode: LastObject de Nsarray. Voici un exemple non testé:
file d'attente.h p> file d'attente.m p>