iPhone CGRectСделать потребление памяти - PullRequest
2 голосов
/ 06 октября 2009

На iPhone .. Почему такой код вызывает утечку памяти? через 2 минуты чистые байты удвоились. Все, что я делаю, это перемещаю шарик по экрану с помощью NSTimer, вызывающего следующий метод.

Есть идеи?

- (void)nextFrame:(NSNotification *)notification {
    ballInstance.frame = CGRectMake(value, 0,  320, 480);
}

вот «полный» код, новый проект, все еще ведет себя так же. Он перемещает JPG по экрану, и, как это происходит, память используется в массовом порядке. Если я удалю '++' из 'value', память будет в порядке. (другими словами, есть статическая графика). Так ... кешируется ли изображение? Если так, как я могу остановить его достижение астрономических размеров?

- (void)applicationDidFinishLaunching:(UIApplication *)application {    


    [window makeKeyAndVisible];

    NSTimer * nSTimer =[NSTimer scheduledTimerWithTimeInterval: .02
         target: self
       selector: @selector(tick)
       userInfo: nil
        repeats: YES];
    value =0;
}

- (void)tick {
    NSLog(@"tick");
    myOutlet1.frame = CGRectMake(value++, 0,  320, 480);
}

Ответы [ 4 ]

8 голосов
/ 06 октября 2009

Опубликованный код не имеет утечки. Проблема в другом месте.

Если вы знаете, что внутри nextFrame: есть утечка, она должна быть в -[Ball setFrame:], потому что это единственное сообщение, отправленное этим методом.

3 голосов
/ 06 октября 2009

Утечка отсутствует в показанном вами коде, особенно если frame является свойством @synthesized. Вам либо нужно показать больше кода, либо потратить некоторое время на инструменты, чтобы выяснить, что происходит утечка и где она выделяется.

2 голосов
/ 07 октября 2009

По данным Apple:

Это ошибка в iPhone OS 3.0. Распределитель для графической системы
сообщает о событиях realloc как событиях malloc, поэтому ObjectAlloc учитывает
это как новые объекты, которые почти никогда не освобождаются. Я не
определенно, почему вы можете не увидеть его при добавлении инструмента «Утечки», но
ни один из инструментов не показал бы истинную утечку для этого.

Хотя я все еще не знаю, как это исправить.

1 голос
/ 07 октября 2009

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

http://static.fatmixx.com/MemTestApp.zip

Похоже, здесь нет утечки. Я работаю против iPhoneOS 3.1 - отладка.

Sujal

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