Si je crée une chaîne avec [NSString StringWithFormat], dois-je la [conserver]? Ma compréhension est que les méthodes de commodité ajoutent les objets au pool autorelease. Si tel est le cas, ne devrions-nous pas conserver l'objet afin qu'il ne soit pas drainé avec pool à la fin de la boucle d'événement?Objectif C NSString Conserver
Répondre
Si la chaîne doit persister au-delà de la fonction en cours, alors oui, l'objet qui en a besoin doit le conserver. Voici un de ces endroits où le phrasé anglais semble banal mais dissimule en réalité un concept clé. Plutôt que de dire "dois-je le retenir?" ou (comme je l'ai écrit à l'origine) "si vous voulez que la chaîne persiste", parlez en termes d'un objet en conservant la chaîne. La différence est que ce dernier exprime le concept de ownership (note: la documentation d'Apple utilise "vous" quand on parle de propriété, mais c'est un "neutre" à la troisième personne plutôt qu'un "vous" à la deuxième personne). Bien sûr, si vous stockez la chaîne dans un property, la conservation (ou la copie) est gérée pour vous. Sauf si vous devez cibler des versions plus anciennes d'OS X (10.4 et versions antérieures), vous devez généralement utiliser les propriétés.
Les collections standard possèdent les objets qu'elles contiennent et les conservent ainsi. Lorsqu'un élément est retiré d'une collection, la collection libère l'élément (note: ils ne sont pas autorelease, donc si l'objet n'a pas d'autres propriétaires, l'objet sera détruit). En savoir plus sur ce sujet dans "Validity of Shared Objects". La documentation memory management d'Apple devrait vous indiquer tout ce que vous devez savoir.
- 1. objectif c Comparaison NSString
- 2. Objectif C NSString problème
- 3. Objectif C NSString étant publié dans singleton
- 4. Objectif C ==> unichar [] à NSString?
- 5. Objectif C: Sortie du terminal dans NSString
- 6. Convert Objectif C int NSString (iPhone)
- 7. iphone: objectif-c: comment compresser NSString?
- 8. objectif-c 2.0 propriétés et «conserver»
- 9. libérer et conserver NSString * correctement
- 10. Objectif-c NSFilePosixPermissions à lisible par l'homme NSString
- 11. Objectif C - Ecrire un NSString à un plist
- 12. Objectif C: Dois-je libérer le NSString dans cet exemple?
- 13. problème à propos de subview conserver superview dans objectif-C
- 14. NSString (pointeur/non pointeur) Affecter ou conserver
- 15. @property objectif-c syntax
- 16. Objectif C: erreur "EXC_BAD_ACCESS"
- 17. Objectif-C: découper les espaces
- 18. chaîne objectif C Confusion
- 19. objectif c popen
- 20. fichier http télécharger Objectif C
- 21. Accès DOM Webkit Objectif C
- 22. Objectif C - Constantes avec comportement
- 23. objectif c réaffecter le point
- 24. Objectif C, unescape caractères unicode
- 25. objectif-c
- 26. paramètre Objectif d'exécution C liant
- 27. Débutant Objectif C développeur question
- 28. Objectif C Comparaison de chaînes
- 29. objectif c gestion de la mémoire
- 30. Objectif C - Problème avec objectForKey
Merci beaucoup. Je suis un programmeur Java, d'où les concepts de propriété etc. ne coule pas encore naturellement :) Une autre question connexe, si je crée un NSArray (en utilisant [new]) de NSString, alors, est-il correct que je n'ai pas besoin de conserver le NSString plus, car il est maintenant détenu par le NSArray qui est la propriété de moi. Par conséquent, si je conserve/libère correctement mon NSArray, les NSStrings qu'il contient seront toujours implicitement conservés/libérés par moi. Nous supposons que j'ai besoin que NSArray et ses membres NSStrings soient disponibles tout au long du cycle de vie de l'application. – Amarsh
@Amarsh: correct à propos de NSArray. La réponse mise à jour donne un peu plus de détails. – outis
Merci encore une fois. Une autre question dans le même contexte. -je ajouter un objet comme suit: [someNSArray addObject: [SomeClass alloc]] et plus tard, appelez: [someNSArray removeAllObjects] Dans ce cas, sera mon objet SomeClass obtenir désallouée par lui-même? Ma confusion fondamentale est, dans les cas où nous allouer-un objet et l'ajouter à une collection, qui est le propriétaire, la collection ou vous ... ou les deux? – Amarsh