Quelle est la plus grande quantité d'objets que je peux mettre dans mon NSArray?Nombre maximum d'objets dans NSArray
Répondre
La méthode NSArray initWithCapacity prend un entier non signé en argument. Donc, quelle que soit la valeur maximale d'un int non signé sur votre plate-forme peut être la limite théorique. Cependant, la limite réelle est plus susceptible de dépendre de la quantité de mémoire disponible. NSArray est un conteneur de pointeurs vers d'autres objets.
Probablement plus que votre RAM peut gérer.
Sa capacité maximale est définie par NSUInteger (sur les dernières versions des systèmes d'exploitation disponibles):
Lors de la construction des applications 32 bits, NSUInteger est un entier non signé 32 bits . Une application 64 bits traite NSUInteger en tant que 64 bits non signé entier
Par conséquent, quelle que soit la taille de NSUInteger est sur un périphérique donné est le nombre maximum de pointeurs d'objets qu'il peut contenir. Cependant, comme Eimantas l'a fait allusion dans sa réponse, ce n'est pas la même chose que «combien d'objets peuvent-ils contenir» parce que cela dépend de la mémoire disponible. Vous n'avez pas assez de RAM disponible à un moment donné pour allouer un tableau avec six milliards de slots par exemple ...
Dans la plupart des cas concernant les limites supérieures des structures de programmation et similaires:
"Si vous devez demander , vous le faites probablement mal "- TheDailyWTF.com
Avez-vous essayé de le savoir? ;)
NSMutableArray * a = [[NSMutableArray alloc] init];
NSUInteger i = 0;
@try {
while (1) {
[a addObject:@"hi"];
i++;
}
} @catch (NSException * e) {
NSLog(@"added %llu elements", i);
}
Delong pendant que j'essaie votre idée et trouve la limite de taille , cette application se bloque et obtient une erreur lorsque le programme reçoit le signal: "0". Data Formatters temporairement indisponible, ré-essayer après un «continuer».(Erreur inconnue lors du chargement de la bibliothèque partagée "/Developer/usr/lib/libXcodeDebuggerSupport.dylib") –
vous avez manqué de mémoire. Il suffit de consigner ce que je vois à chaque itération et de le laisser s'écraser, le dernier journal vous dira combien vous pourriez obtenir. En passant, votre test vous indique que la taille est limitée à la mémoire. –
NSNotFound est défini comme NSIntegerMax (cette valeur change si vous êtes sur un système 32 bits ou 64 bits)
NSNotFound est aussi le résultat que vous obtenez lorsque vous faites un
[NSArray IndexOfObject: obj]
et aucun objet n'a été trouvé.
Si vous ne manquez pas d'espace/mémoire, je dirais que ce serait votre limite.
- 1. Nombre d'objets dans un NSArray
- 2. nombre maximum combinaisons
- 3. Nombre maximum de lignes dans le SGBD
- 4. Détermination du nombre d'objets dans un NSArray
- 5. JPA/Hibernate nombre maximum de jointures?
- 6. iphone & notifications: nombre maximum de notifications?
- 7. "Nombre maximum d'éléments sélectionnés" -Validator pour ListBox
- 8. Réglage nombre maximum de colonnes pour ListView
- 9. Nombre maximum de prises pour PHP stream_socket_client
- 10. Nombre maximum d'éléments UITabBar autorisés dans le SDK iPhone?
- 11. Recherche du nombre maximum dans une programmation C de tableau
- 12. Nombre maximum de champs de recherche dans une liste
- 13. Nombre maximum de résultats dans un champ Sitecore Droplink?
- 14. Nombre maximum de descendants dans un arbre B
- 15. Nombre maximum de connexions simultanées possibles dans BlazeDS
- 16. Forcer un nombre maximum de pages dans LaTeX
- 17. Trouver le nombre maximum d'utilisateurs connectés dans SQL
- 18. Nombre maximum de contrôles des pages maîtres dans SharePoint 2010
- 19. LINQ: GroupBy avec un nombre maximum dans chaque groupe
- 20. nombre maximum de lignes pouvant être affichées sur tableview
- 21. Jquery au nombre maximum d'un ensemble de divs
- 22. Cocoa Touch - Réglage du nombre maximum de touches
- 23. Nombre maximum de lignes par MySQL (Billions) NDBCLUSTER?
- 24. De procédure stockée comment obtenir le nombre maximum
- 25. Linq: Comment le groupe par le nombre maximum d'éléments
- 26. NPTL limite le nombre maximum de threads à 65528?
- 27. Nombre maximum de demandes pour google maps api?
- 28. Recherche du nombre maximum de lignes créées par heure?
- 29. nutch crawler - comment définir le nombre maximum d'inlinks par hôte
- 30. Retour liste avec le nombre maximum en utilisant Linq
'NSUInteger', pas' int' non signé. Sur les architectures 64 bits, 'unsigned int' est toujours à 4 octets, alors que' NSUInteger' - qui est ce que NSArray utilise depuis Leopard - est 8. –
Il n'est pas correct de supposer que le nombre maximum d'objets NSUIntegerMax. Comme le souligne jsmp, NSArray utilise NSNotFound. NSNotFound est défini comme NSIntegerMax qui est inférieur à NSUInteger. Cela implique que le nombre maximum d'objets est NSIntegerMax-1. Je voudrais tester cela comme le suggère Dave Delong mais je n'ai plus de mémoire! –
Espérons que vous avez assez de RAM pour contenir 180 fois plus d'informations que le Lt. Cmd. Les données! http://www.wolframalpha.com/input/?dataset=&i=(1*(2%5E64)+%2B+8+%2B+8)+bytes –