Je déclare mon tableau dans mon * .h Fichier:
x = 12; x = 24;
3 Réponses :
Vous ne chargez pas votre tableau avec à la place, vous le remplacez par une nouvelle instance et pire: avec une instance, dont la référence est en fait la propriété de certaines entités que vous ne trouvez pas Contrôle (probablement, un est perdue et sera divulguée. p> au lieu de remplacer toute la référence de la matrice, Mutate celle que vous avez déjà à votre disposition, en utilisant par exemple etc. Afin de dégager les anciennes valeurs, la méthode Alternativement, vous pouvez également affecter la matrice à l'aide de la méthode de construction que vous utilisez déjà, mais faites attention à le retenir. Dans nsautoreleeepool code>.) La référence que vous possédez correctement, celle créée par p>
addObject: code> comme p>
removeallobject code> peut être pratique. Il existe également des méthodes de mutation, qui peuvent être utilisées pour ajouter de multiples valeurs à la fois. P>
ViewDiDloadload CODE> DO P>
anArray = [[NSMutableArray arrayWithObjects:@"one", @"two", @"three", nil] retain];
Le problème est Il existe plusieurs façons de résoudre ce problème, mais il est à utiliser Un autre, probablement plus correct de résoudre ce serait d'utiliser le anarray = [NsmutableArraRay ArraywithObjects: @ "One", @ "Deux", @ "Three", Nil]; Code> Ceci remplace la matrice que vous avez initialement créée. Le problème de le faire est que ce nouveau tableau n'est pas conservé, vous le perdez donc dès que la méthode revient. En outre, vous avez une fuite de mémoire parce que vous n'avez jamais libéré le tableau d'origine. P>
[version anarray]; anarray = [[[[NsmutableArraRay ArraywithObjects: @ "Un", @ "Deux", @ "Three", Nil] Conserver]; Code>. P>
addObject: code> ou
addObjectsfromarray: code>
nsmutableArray code> méthodes au lieu de créer constamment de nouvelles tableaux. P>
N'oubliez pas que cette règle de mémoire simple: Seulement libérer des objets que vous possédez strong>. Vous possédez des objets uniquement lorsque vous les créez à l'aide de: Le système Un pointeur est un objet spécial qui fait référence à un objet en mémoire. C'est fondamentalement une adresse mémoire (et d'autres données). Si vous souhaitez utiliser un objet, vous devez
init code> (cette méthode crée un nouvel objet avec un nombre de retenue de 1) em> li>
nouveau code> (cette méthode est la même que d'utiliser alloc et init) em> li>
copie code> (cette méthode crée un nouvel objet avec un nombre de retenue de 1 et avec le contenu du récepteur de la méthode) em> li>
conserver code> (cette méthode augmente le nombre de retenue avec 1) em> li>
ul>
DealLoc code> ATES Les objets automatiquement avec un nombre de retenue de zéro. Vous devez
libérer code> chaque objet que vous possédez après que vous soyez terminé. Si vous
Libération Code> Trop tôt, vous obtenez une situation dangereuse. Si vous ne
NE PAS CODE> Votre objet Lorsque vous en avez terminé, vous obtenez une fuite. P>
ATELO CODE> METTE MÉMOIRE POUR IT, puis
INIT CODE> IALIZE. Vous assignez (en utilisant le signe
= code> signe) sur un pointeur. P>
NSArray *myArray = [NSArray arrayWithObjects: @"Butter", @"Milk", @"Honey", nil];
Avez-vous besoin de boucler à travers tous les éléments de la matrice et d'appeler la libération sur chacun avant?
@tivo Si vous utilisez ARC (qui correspond à la valeur par défaut de Xcode), vous n'utilisez jamais version code> complètement. ;-)
Je sais que ce post fait vie à l'heure d'Internet, mais j'aimerais préciser que, dans le développement du cacao, nous ne manipulons pas vraiment de manipuler des données de données eux-mêmes, mais plutôt des indicateurs. Gardez cela à l'esprit à tout moment et gardez à l'esprit que vous devez faire très attention à l'affectation du pointeur.
J'aimerais pouvoir vous donner plus d'un vote à l'UP - j'ai exactement les mêmes problèmes - l'objectif c est au-delà du contre-intuitif.