iOS Object Array: Создание массива объектов внутри функции - PullRequest
1 голос
/ 17 мая 2011

У меня есть класс "Note", и у меня есть класс Tuner.Мой класс Tuner инициализирует NSArray* в своей функции init.

Я хочу инициализировать этот массив для хранения 88 заметок, и сейчас я создаю такие вещи, как Note * key1;и т. д. и т. п.

Я просто хочу убедиться, что мне нужно выделить вещи для этих заметок, чтобы они не выходили за рамки после завершения init, и мой NSArray оставался в такте с его записями, илиЯ могу просто объявить Note key1 и вставить в массив, и он позаботился обо мне.Пример кода, создающего NSArray, содержащий несколько объектов, таких, что массив останется без изменений даже после выхода из функции, был бы очень полезен.Спасибо!

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

Вот простой пример того, как вы могли бы сделать это в функции инициализации вашего Tuner класса

for ( int i = 0; i < 88; ++i )
{
    Note *key = [[Note alloc] init];
    [myNotes addObject:key];
    [key release];
}

Обратите внимание, что в моем примере myNotes предполагается типа NSMutableArray Это единственный способ создать массив, добавляя объекты по отдельности.

2 голосов
/ 17 мая 2011

NSArray и NSMutableArray отправляют -retain объектам, когда они добавляются, поэтому целесообразно сделать -release объекты, которые вы добавляете явно, или использовать объекты с автоматическим выпуском.

ВотКраткий пример метода -init класса Tuner:

- ( id )init
{
    NSInteger    i;
    Note         *note;

    self = [ super init ];
    if ( self ) {
        notes = [[ NSMutableArray alloc ] initWithCapacity: 88 ];
        for ( i = 0; i < 88; i++ ) {
            note = [[ Note alloc ] initWithKey: i ];
            [ notes addObject: note ];
            [ note release ];
        }
    }

    return( self );
}

Вам потребуется +alloc каждый объект Note и -release его, поскольку при добавлении его в массив он сохраняется.Чтобы уничтожить все объекты заметки, когда вы закончите, убедитесь, что ваш класс Tuner освобождает массив в своем методе -dealloc:

- ( void )dealloc
{
    [ notes release ]; // this sends release to all objects in the array, too

    [ super dealloc ];
}
1 голос
/ 17 мая 2011

Внутри класса, который будет содержать массив notes.

  1. Создайте свойство, используя (nonatomic, retain) типа NSMutableArray с именем notes.
  2. Синтезируйте его.
  3. Убедитесь, что он освобожден в методе dealloc.

Внутри метода для создания массива:

  1. инициализируйте и выделите новый временный NSMutableArray.
  2. Зацикливание и добавление всех объектов Note в массив.
  3. Добавление этого массива в заметки.
0 голосов
/ 17 мая 2011

Ну, я не совсем уверен, что вы пытаетесь сделать, но вы можете просто создать NSMutableArray как глобальную переменную. Затем вы можете добавить и удалить любой объект любого типа в этот массив. Массив все еще будет в памяти, пока вы не вызовете его метод release.

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