2015-03-02 2 views
2

Я обнаружил проблему с утечкой памяти при работе со String (NSString) методами компоновки и извлечения (например, stringByAppendingPathComponent, lastPathComponent).iOS 8 Утечка памяти с помощью String в Swift

Я создал образец цикла (см. Код ниже), и когда я запускаю его на симуляторе, и память устройства не освобождается. Он берет гигабайты! Даже после того, как конец памяти цикла не уменьшается.

Я попытался использовать autoreleasepool {} без успеха.

У кого-нибудь есть идея, почему это происходит и как исправить это?

Я воздействую на Xcode 6.3 бета-2, в том числе IOS, 8.3 SDK с Swift 1,2

func memoryLeakTest() { 

    for _ in 1...1000000 { 

     let url = NSURL(scheme: "http", host: "google.com", path: "/")! 
     let path = url.path 
    } 
} 

Пример с autoreleasepool:

func memoryLeakTest() { 

    for _ in 1...1000000 { 

     autoreleasepool { 

      let url = NSURL(scheme: "http", host: "google.com", path: "/")! 
      let path = url.path 
     } 
    } 
} 

ОБНОВЛЕНО

Проблема возникает только на :
- Xcode 6.3 beta 2, включая iOS 8.3 SDK с Swift 1.2

Испытания, проведенные на предыдущих версиях не показывать проблему:
- Xcode 6.2 бета-5, в том числе IOS 8.2 SDK с WatchKit
- Xcode 6.1.1

+1

Покажите нам, как вы использовали 'autoreleasepool'. –

+1

Память не может быть очищена во время цикла, но ее следует очистить после. autoreleasepool должен решить проблему, но в любом случае, почему вы создаете NSURL каждый раз, вместо повторного использования одного и того же экземпляра? Что вы пытаетесь достичь здесь. –

+0

Это просто фиктивный код, чтобы показать проблему. – dtd

ответ

0

Попробуйте объявить URL и путь перед циклом.

Это должно привести к повторному использованию одной и той же переменной и освобождению предыдущей ссылки.

Смежные вопросы