Сбой приложения на iPhone - PullRequest
0 голосов
/ 17 июня 2009

Я занимаюсь разработкой игры, в которой мне нужно загружать изображения пальцем. Для этого я загрузил все изображение 22 размера (788x525) при загрузке самого представления. Затем, проведя пальцем, я просто добавил изображение на просмотр.

Это отлично работает на iTouch, но на iPhone вылетает игра после отображения около 12 изображений.

Вот так я и добавил изображения, graphicsArray - NSMUTableArray.

for ( int i=0; i<=totalNoofPages;i++){
    NSString * graphicsFileName = @"Page";
    graphicsFileName =
                [graphicsFileName
                 stringByAppendingString:[NSString stringWithFormat:@"%d", i]];
    UIImage *image =
               [[UIImage alloc] initWithContentsOfFile:
               [[NSBundle mainBundle] pathForResource:graphicsFileName
                                      ofType:@"jpg"]];
    GraphicsImages =
               [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 480,320 )];
    GraphicsImages.image = image;
    [image release];
    [GraphicsImages setCenter:center];

    GraphicsImages.transform = CGAffineTransformMakeRotation(M_PI/2);
    [graphicsArray insertObject:GraphicsImages atIndex:i];
}

и, когда я пишу пальцем, пишу, pageNo - номер страницы, которая будет отображаться.

GraphicsImages = [graphicsArray objectAtIndex:pageNo];
[self addSubview:GraphicsImages];

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

Пожалуйста, помогите мне в этой ситуации.

Заранее спасибо.

С уважением, Вишал.

Ответы [ 2 ]

0 голосов
/ 17 июня 2009

Можете ли вы указать ошибку, которая появляется при сбое приложения? Знание того, какое исключение вызывается, поможет во многом понять, что происходит.

Я могу вам сказать, что вы не выпускаете переменную GraphicsImages в цикле for, так что это приводит к утечкам памяти. Однако я полагаю, что этого недостаточно, чтобы вызвать аварию. В любом случае сделайте это:

[ graphicsArray insertObject:GraphicsImages ];
[ GraphicsImages release ];

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

0 голосов
/ 17 июня 2009

У вас сбой из-за недостатка памяти?

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

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