2014-09-30 4 views
2

Мне не хватает чего-то очевидного, но как получилось, что следующее очень простое приложение, которое создает 1000 1MB объектов данных и хранит их в массиве, работает и не кажется насыщенным (объем памяти приложения отображается как 1,7 МБ в Xcode)? Этот код был протестирован на iPad 2 с 1 ГБ памяти и не разбился.Использование памяти Objective-C

@implementation AppDelegate { 
    NSMutableArray* datas; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    datas = [NSMutableArray new]; 
    for (int i = 0; i < 1024; i++) { 
     [datas addObject:[NSMutableData dataWithLength:1024*1024]]; 
    } 
    return YES; 
} 

@end 

Я думаю, что вопрос на самом деле, если некоторые из распределений фактически сделано на флэш-памяти IPAD (вместо RAM), и если кто-нибудь имеет какие-либо более подробную информацию об этом?

+0

Это сбой для меня при запуске устройства. Вызов 'dataWithLength' начинает возвращать нуль (я думаю, когда он заканчивается), а вызов' addObject: 'вызывает исключение. – thelaws

+0

Вы правы, это начинает крутиться в какой-то момент. Тем не менее, я все еще не совсем понимаю, почему Xcode сообщает только о размере памяти 1.7 МБ при запуске приложения. – quentinadam

+1

Когда вы говорите, что Xcode сообщает только 1,7 МБ, это в симуляторе? –

ответ

3

компании Apple всегда сделали следующее заявление о iPhone Simulator:

Важны: Симулятор отлично подходит для отладки, но конечная арбитра, что будет и не будет работать на прошивке является реальное устройство. особенно важно помнить при выполнении тестирования и отладки .

Согласно Apple, Memory Usage Performance Guidelines:

Если вы не планируете использовать конкретный блок памяти сразу же, отложив выделение до того времени, когда вы на самом деле нужно это лучший курс действие. Например, чтобы избежать появления , ваше приложение запускается медленно, свести к минимуму объем памяти, который вы выделяете во время запуска.

Так что я не уверен, что это просто упражнение, чтобы узнать, сколько памяти вы можете выделить или нет. Но если это прототип будущего приложения, я бы изменил структуру вашего приложения и загружал только необходимую информацию, когда вам это нужно. Помните, что все данные хранятся на твердотельном устройстве. У вас не будет удара производительности, который вы могли бы использовать со стандартным жестким диском с шпинделем.

+0

Я должен был добавить, что это было сделано на iPad 2, а не на симуляторе. Идея, конечно же, не загружать память в начале. Проблема в том, что я был удивлен, что я могу загрузить более 1 ГБ памяти на iPad 2 с 1 ГБ оперативной памяти и что я удивлен, что XCode 6 не сообщает об этом использовании памяти (использование памяти составляет около 1.7 МБ) – quentinadam

Смежные вопросы