Приложение iPhone использует 150 МБ памяти и все еще не предупреждает о нехватке памяти! - PullRequest
4 голосов
/ 22 июля 2011

У меня есть вопросное приложение, навигация на основе которого я создаю и каждый раз отправляю свои таблицы из пера.нет утечек, и в инструментах живые байты кажутся около 2-3 МБ.

Я тестировал на реальном устройстве (взломанный iPhone IOS4 с джейлбрейком), когда я углубляюсь в навигацию (около 200 страниц), я вижуэто использование памяти достигает 150 МБ!когда я возвращаюсь к корню, тогда все они освобождаются, но разве это не странное поведение?(около 800 КБ для каждого представления пера и без больших данных или изображений в нем)

Самое странное, я поставил несколько предупреждений для методов didreceivememorywarning и didunloadview, и все же не получил никаких предупреждений памяти!

-Почему я не получаю никаких предупреждений о памяти и viewDidUnload, даже если приложение использует 150 МБ и больше памяти?-Приложение работает, но является ли это использование памяти проблемой для Apple store?

Ответы [ 3 ]

16 голосов
/ 22 июля 2011

Что-то Funky происходит. Попробуйте следующий код, чтобы проверить версию ОС, сколько памяти использует ваше приложение

-(void) report_memory {
    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        NSLog(@"Memory in use (in bytes): %u", info.resident_size);
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }


}

Вам нужно будет #import "mach / mach.h"

Это скажет вам, сколько памяти операционная система предоставила вашему приложению. Так что, если вы видите какое-то странное поведение инструментов, это должно пролить некоторый свет.

2 голосов
/ 30 июля 2011

Я просто добавляю self.view = nil в метод viewDidDisappear, он работает, и я могу восстановиться, гораздо лучше сейчас.tnx Felz за помощь

0 голосов
/ 06 февраля 2017

Старый вопрос, но дополняет ответ fsaint в случае, если кто-то все еще хочет знать, как его использовать:

Он может быть помещен в любое место, где вы хотите регистрировать использование памяти, например, в конкретном контроллере представления.Чтобы войти в приложение целиком, вы можете поставить на свой AppDelegate.m.В верхней части файла:

#import <mach/mach.h>

Вставьте метод в любое место класса:

- (void) report_memory {
    struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        long mb = info.resident_size / 1000000;
        NSLog(@"Memory in use (in Mbytes): %lu", (long)mb);
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
    }
}

Включите таймер для вызова этого метода из didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    (...)
    [NSTimer scheduledTimerWithTimeInterval: 2.0
                                     target: self
                                   selector: @selector(report_memory)
                                   userInfo: nil
                                    repeats: YES];
}

Запустите приложение и просмотрите журналы на предмет использования памяти.

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