NSMutableArray с 500 объектами. - PullRequest
       1

NSMutableArray с 500 объектами.

0 голосов
/ 05 августа 2011

У меня есть массив из 500 объектов, каждый из которых является необходимым, потому что каждый из них представляет другой вопрос для моей программы. Похоже, что моей программе на iPhone 4 требуется совсем немного памяти, примерно 50 Мб. Я вижу, что когда массив используется, он, кажется, немного отстает от программы. Будет ли массив такого размера вызывать задержку при использовании? Может кто-нибудь подсказать, сколько памяти использует этот массив?

Я подумал, может быть сохранение массива в plist-файл и использование массива оттуда, сэкономит ли это память?

Спасибо, Jacob

Ответы [ 4 ]

1 голос
/ 05 августа 2011

Предположим, что вопрос содержит следующее

    typedef struct
    {
       char _question[255];
       char _answerA[255];
       char _answerB[255];
       char _answerC[255];
       char _answerD[255];

       int _correctAnswer;

} question;

Сохраните в файл 500 этих структур в порядке вопросов.

Все 500 вопросов занимают примерно 0,609874725 мбс в этом примере.

Затем откройте файл и найдите вопрос

    Handle fOpen... 
        fSeek...  questionNumber *sizeof(question) ;
        read in one question fRead...
    fClose(Handle)
1 голос
/ 05 августа 2011

Прежде всего, мы не можем сказать вам, сколько памяти занимает ваш массив, потому что это зависит от сохраняемых объектов.Однако вы можете использовать инструмент Instruments (Build -> Profile), чтобы посмотреть на это.

Во-вторых, для 500 объектов я бы серьезно подумал об использовании SQLite или CoreData для вашего магазина. Маловероятно, чтоВам нужно все 500 вопросов в памяти одновременно - один или два, вероятно, должны сделать это, в конце концов, на сколько вопросов можно ответить одновременно?

0 голосов
/ 05 августа 2011

Я не могу помочь с памятью, но мне приходит в голову, что, возможно, ответом может быть другая стратегия загрузки.Например, я бы предположил, что пользователь не собирается читать или отвечать на все 500 вопросов за один раз.Так можно ли тогда загружать в блоки, когда они нужны пользователю?или если у вас есть зависимости между вопросами, можете ли вы загружать только те из них, которые актуальны на данный момент?Также может помочь сохранение их в базе данных Core Data, чтобы вы могли запрашивать те, которые необходимы для отображения.

0 голосов
/ 05 августа 2011

Прежде всего, абсолютно невозможно дать оценку, если вы не укажете размер хранилищ объектов. Но тем не менее не стоит загружать все в память. Вы можете хранить вопросы небольшими порциями (скажем, по 10 вопросов каждый) в простых файлах plist. Что касается меня, я предпочитаю хранить такую ​​информацию в базе данных (CoreData очень хорошо управляет памятью).

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