NSMutableArray: как заполнить его данными, освободить его, снова заполнить данными - PullRequest
1 голос
/ 26 июля 2011

У меня есть NSMutableArray в моем приложении, которое я запускаю следующим образом:

H-FILE

NSMutableArray *noteBookContent;
@property (nonatomic, retain) NSMutableArray *noteBookContent;

M-FILE

@synthesize noteBookContent;

У меня естьметод, в котором я открываю txt-файл и считываю его содержимое во временную строку NSString и нарезаю эту строку NSString на разные биты, которые затем помещаются в массив NSMutableArray.Вот так:

    NSString *tempTextOut = [NSString stringWithContentsOfFile:filePath
                                                          encoding:NSUTF8StringEncoding
                                                             error:&error];

self.noteBookContent = [[[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"] mutableCopy] autorelease];

Мой большой вопрос , что произойдет, если я повторю один и тот же процесс пару раз.Нужно ли выпускать noteBookContent перед тем, как в него будут считываться новые данные?Есть ли вероятность того, что данные будут испорчены, например, если один noteBookContent имеет 10 элементов (все они называются FRUIT), а следующий noteBookContent содержит 5 элементов (все они называются SALAD), могу ли я в итоге получить SALAD, SALAD, SALAD, SALAD, SALAD,ФРУКТЫ, ФРУКТЫ, ФРУКТЫ, ФРУКТЫ и т.д.?

Извините, если это очевидно, но я не совсем понимаю, что происходит в тот момент, когда я считываю новые данные в NSMutableArray, который уже содержит старые данные.

Спасибо за любые объяснения!

Ответы [ 2 ]

8 голосов
/ 26 июля 2011

В этом случае вы фактически не изменяете содержимое массива - вы полностью заменяете объект. Старое значение noteBookContent - экземпляр NSMutableArray - освобождается назначением свойства (.noteBookContent = ...) и заменяется новым отдельным NSMutableArray, созданным с помощью вызова -mutableCopy. Более эффективный способ сделать это был бы следующим:

[self.noteBookContent removeAllObjects];
[self.noteBookContent addObjectsFromArray:[tempTextOut componentsSeparatedByString: @"\n[DIVIDER]\n"]];
1 голос
/ 26 июля 2011

Вам не нужно ничего делать, потому что вы используете свойство.Это свойство автоматически обрабатывает управление памятью вашего изменяемого массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...