Я обнаружил проблему с утечкой памяти при работе со 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
Покажите нам, как вы использовали 'autoreleasepool'. –
Память не может быть очищена во время цикла, но ее следует очистить после. autoreleasepool должен решить проблему, но в любом случае, почему вы создаете NSURL каждый раз, вместо повторного использования одного и того же экземпляра? Что вы пытаетесь достичь здесь. –
Это просто фиктивный код, чтобы показать проблему. – dtd