Аудио / видео синхронизация, TS MPEG2; H264 / AVC, понимание PTS в ручном тормозе

Я следую принятому ответу m.kocikowski и модифицировал немного, чтобы использовать autoreleasepool для очистки всех временных строк, которые создаются с помощью stringByReplacingCharactersInRange

. В комментарии к этому методу говорится: , / * Заменить символы в диапазоне указанной строкой, возвращая новую строку. * /

Итак, в зависимости от длины вашего XML вы можете создать огромную кучу новых строк авторекламы, которые не очищаются до конца следующего @autoreleasepool. Если вы не знаете, когда это может произойти, или если действие пользователя может многократно инициировать много вызовов этого метода до этого, вы можете просто обернуть это в @autoreleasepool. Они могут быть даже вложенными и использоваться в пределах петель, где это возможно.

Ссылка Apple на @autoreleasepool заявляет об этом ... «Если вы пишете цикл, который создает много временных объектов, вы можете использовать блок пула автозаполнения внутри цикл, чтобы избавиться от этих объектов до следующей итерации. Использование блока пула автозапуска в цикле помогает уменьшить максимальный объем памяти приложения ». Я не использовал его в цикле, но по крайней мере этот метод теперь очищается после себя.

- (NSString *) stringByStrippingHTML {
    NSString *retVal;
    @autoreleasepool {
        NSRange r;
        NSString *s = [[self copy] autorelease];
        while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) {
            s = [s stringByReplacingCharactersInRange:r withString:@""];
        }
        retVal = [s copy];
    } 
    // pool is drained, release s and all temp 
    // strings created by stringByReplacingCharactersInRange
    return retVal;
}
13
задан Josh 19 January 2011 в 06:29
поделиться