Как динамически распределить массив указателей на объекты в Objective-C? - PullRequest
0 голосов
/ 22 февраля 2010

Я пытаюсь повысить производительность своего приложения, и я хотел бы перейти от NSMutableArray, который я сейчас использую, к динамически размещаемому массиву C.

В качестве теста я создал этот класс:

В моем интерфейсе класса у меня есть:

MyObject *myObjectArray;

В моей реализации, после инициализации объекта, у меня есть другой метод для установки массива:

-(void) createObjectsWithNumberOfObjects:(int)numberOfObjects
{
    MyObject *tempObject = nil;
    myObjectArray = (MyObject*) malloc(numberOfObjects * sizeof(tempObject));
    for( int i = 0; i < numberOfObjects; i++ )
        tempObject = [[MyObject alloc] init];
        myObjectArray[i] = (MyObject*) tempObject; // error
    }
}

Я получаю сообщение об ошибке: Несовместимые типы в назначении

Так что я делаю не так?

Возможно ли использование динамически размещенного массива объектов, подобных этому?

Кроме того, в моем методе dealloc он настроен так, чтобы вызывать release для каждого объекта, а затем free (myObjectArray)

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

Вам нужно еще * с. Объявите указатель массива как:

MyObject **myObjectArray;

И затем инициализируйте это так:

myObjectArray = (MyObject**) malloc(numberOfObjects * sizeof(MyObject *));

Оставьте все остальное в вашем коде таким же, как сейчас, и вам должно быть хорошо! Почему вы хотите перейти с NSMutableArray? Он гораздо более гибок в плане гибкости и поддержки Какао, чем ваш массив C.

0 голосов
/ 22 февраля 2010

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

Теперь, если бы вы создавали связанный список или что-то подобное, это могло бы принести пользу таким вещам, как вставки в середине ... но только для простого массива, к которому вы можете добавить, я не уверен, сколько вы получите увидим.

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