Si je déclare un NSArray
avec alloc
& retain
en phrase alors devrais-je libérer l'objet NSArray
deux fois (à savoir [arrayObject release]
2 fois)?NSArray libérer
Répondre
Non, vous devez libérer l'objet pour chaque alloc et chaque conserver. (Et vous ne pouvez pas alloc un objet plus de 1 fois en tout cas.)
Si vous
NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
arrayObject = [[NSArray alloc] init];
...
alors il a juste mauvais code. Cette dernière tâche couvrira l'ancienne, ce qui provoque une fuite. Soit utiliser 2 objets et libérer chacun d'eux une fois:
NSArray* arrayObject1, arrayObject2;
arrayObject1 = [[NSArray alloc] init];
arrayObject2 = [[NSArray alloc] init];
...
[arrayObject1 release];
[arrayObject2 release];
ou libérer l'objet avant une autre initialisation.
NSArray* arrayObject;
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];
arrayObject = [[NSArray alloc] init];
...
[arrayObject release];
Si vous créez un NSArray
avec un alloc
et un retain
sur la même ligne, alors vous faites probablement quelque chose de mal.
Les objets sont alloc
ed avec un nombre de retenues de +1, il n'est donc pas nécessaire d'appeler le retain
.
Pour répondre directement à votre question; oui, vous devez le release
deux fois. Une fois parce que vous avez créé l'objet et une fois parce que vous l'avez édité. Mais je me demanderais pourquoi vous devez retenir un temps supplémentaire en premier lieu.
Vous n'avez pas besoin de le conserver. Vous conservez déjà - ou prenez possession - d'un objet lorsque vous allouez/init. Revisitez le Memory Management Programming Guide for Cocoa.
- 1. NSArray triéArrayUsingSelector
- 2. Comment libérer NSString
- 3. libérer
- 4. NSArray mémoire NSString fuite
- 5. Tri de NSArray et retour de NSArray?
- 6. Retour d'un NSArray sans fuite?
- 7. Libérer Quickie
- 8. randomize NSArray
- 9. NSArray Problème
- 10. NSArray, UITableView
- 11. NSArray gestion de la mémoire
- 12. Tri NSArray en utilisant un autre NSArray comme guide
- 13. comment trier un NSArray avec un NSArray imbriqué
- 14. NSArray dans NSArray ne pas retourner l'image que je veux
- 15. Libérer CGImage (CGImageRef)
- 16. Comment libérer la mémoire?
- 17. CFDictionaryValueCallBacks conserver/libérer?
- 18. Comment libérer cet objet?
- 19. Quand libérer l'objet NSUrlConnection
- 20. Libérer UIImage après l'utilisation
- 21. Libérer l'ActiveXObject de JavaScript()?
- 22. Libérer des ressources d'application
- 23. Filtre NSArray iphone
- 24. NSArray trier et isoler
- 25. Itérer via un NSArray
- 26. Valeur vide dans NSArray
- 27. Problème NSArray/NSDictionary imbriqué
- 28. tri NSArray de NSDates
- 29. données NSArray dans UILabel
- 30. initWithCapacity: dans NSArray
Cela ressemble plus à un oui qu'à un non. –
@Peter: Mon mauvais, je lis * avec alloc et init sur la même ligne *. Je vais supprimer ma réponse demain. –