GDataXMLDocument Увеличение памяти - PullRequest
0 голосов
/ 29 февраля 2012

Привет всем, я использую rss reader, предоставленный Ray , и это здорово.Приложению необходимо проанализировать довольно большой XML-файл размером около 7 МБ.Процесс работает нормально, и я могу скачать и проанализировать контент и сохранить его в базе данных.Тем не менее, у меня есть большая проблема с памятью.При запуске в Instruments он поднимается примерно до 30 Мб, и хотя он работает всего 30-40 секунд, он вылетает из приложения, когда я выполняю загрузку и анализ при первом запуске.

Любая помощь по этому вопросу будет принята с благодарностью.Код, который, по моему мнению, вызывает основную проблему:

- (void)requestFinished:(ASIHTTPRequest *)request {


    //////// problem code /////////
        NSError *error;

    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[request responseData] 
                                                       options:0 error:&error];
    [_queue addOperationWithBlock:^{

    if (doc == nil) { 


    } else {

        entries = [NSMutableArray array];

        [self parseFeed:doc.rootElement entries:entries];                

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            for (RSSEntry *entry in entries) {

                int insertIdx = [_allEntries indexForInsertingObject:entry sortedUsingBlock:^(id a, id b) {
                    RSSEntry *entry1 = (RSSEntry *) a;
                    RSSEntry *entry2 = (RSSEntry *) b;
                    return [entry1.articleDate compare:entry2.articleDate];


                    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
                    //... do everything I've done before...
                    [pool drain];


                }];

                [_allEntries insertObject:entry atIndex:insertIdx];

                entries = 0;

            }                            

        }];

    }   

        //[doc release];
        //doc = nil;

}];

[doc release];
doc = nil;
[error release];

}

1 Ответ

0 голосов
/ 29 февраля 2012

На сайте Ray Wenderlich также есть статья о преимуществах различных парсеров XML . Считается, что синтаксический анализатор GDataXML имеет один из самых больших следов памяти, и вам, возможно, придется перейти на что-то вроде TBXML .

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