악기에서 발견 된 것은 NSManagedObject
을 생성 할 때마다 적어도 하나의이 객체가 메모리에 영구히 남아 있다는 것입니다. 저는 "Books"라는 이름의 엔티티가있는 빈 프로젝트를 만들었습니다.초기화되지 않은 상태에서도 메모리에있는 NSManagedObject
이 엔터티의 클래스 :
뷰 컨트롤러 deinitializes, 나는 위로 청소 :
class Books: NSManagedObject {
@NSManaged var name: String
convenience init(context: NSManagedObjectContext, name: String) {
let description = NSEntityDescription.entity(forEntityName: "Books", in: context)!
self.init(entity: description, insertInto: context)
self.name = name
}
deinit { print("\(type(of: self)): deinitialized") }
}
는, 악기 Books
의 여러 인스턴스를 Books
여러 나타나 내가 만들 때 문맥 :
deinit {
context.registeredObjects.forEach { context.refresh($0, mergeChanges: false) }
print("\(type(of: self)): deinitialized")
}
이 아무것도 뷰 컨트롤러에없고 로그가 모든 인스턴스를 표시하고
컨트롤러 deinitialized됩니다 뷰 컨트롤러가 deinitialized 한 후
그래서, 악기는 여전히 Books
1 개체를 보이고있다.
질문 :
나는 다양한 개체의 인스턴스를 만드는 경우, 그때 그들 모두가 영원히 기억에 남아 있습니다. 메모리를 "깨끗하게"유지할 수있는 방법이 있습니까?
편집 : 비주얼 메모리 디버거의
스크린 샷은 짧은 대답은 refresh
호출이 객체가 메모리에 있는지 여부와는 상관이 없다는 것입니다
위대한 정보 주셔서 감사합니다, 링크 (및 내부 링크) 정말 유용합니다. Visual Memory Debugger의 스크린 샷을 추가했습니다. 모든 것을 의미하지만 실제로 NSManagedObjectContext가 어떻게 동작하는지 알지 못한다. 그리고 당신 말이 맞습니다. 64 바이트는 가치가 없습니다. 호기심을 위해 스크린 샷을 게시했습니다. 코어 데이터를 더 잘 이해할 수 있습니다. –