NSArray: освободить свои объекты, но сохранить указатель на него - PullRequest
0 голосов
/ 17 мая 2010

Я объявляю NSArray в своем коде, затем строю массив из другого массива. Я обрабатываю свой NSArray, и когда я закончу, я хотел бы освободить объекты, но позже я снова использую этот указатель на NSAarray, чтобы выполнить тот же процесс (создание массива из другого массива, процесс затем освобождение) .. Итак Мне нужно держать указатель. Что я должен делать ?

Вот примерно то, что я хочу сделать, buildArray создает и возвращает автоматически выпущенный NSArray:

NSArray *myArray;
for (int i = 0, i < 10, i++){
  myArray = [NSArray arrayWithArray:[self buildArray]];
  // Here I process myArray

  ...

  myArray = nil; // is my guess
  }

Мне нужно сохранить указатель на мой NSArray, чтобы использовать его позже в цикле, но что происходит с объектами, созданными с помощью [self buildArray]? Что лучше всего сделать, чтобы не хранить неиспользуемые объекты и массивы?

Или, может быть, лучшее решение - просто удалить AllObject из массива ..?

Спасибо!

Ответы [ 2 ]

1 голос
/ 17 мая 2010

Вы не можете повторно использовать NSArray, поскольку он неизменен. Вы можете использовать NSMutableArray (который поддерживает -removeAllObjects).

Если вам нужно, чтобы указатель оставался неизменным, но в контурах он не нужен, вы можете просто использовать

loop {
  NSArray* myArray = [self buildArray];
  ...
  // myArray = nil; // optional.
}
0 голосов
/ 17 мая 2010

Не делай так. Вместо этого выполните:

for (int i = 0, i < 10, i++){
    NSArray *myArray = [self buildArray]; //buildArray should return an autoreleased object
    //Process array
    //myArray goes out of scope and is autoreleased later, releasing all of its objects
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...