Tôi đang phải đối mặt với một rò rỉ bộ nhớ mà tôi không thể hiểu PFBCoreData Fetch Yêu cầu đúc [Bất kỳ] tới [AnyObject] sản xuất bộ nhớ bị rò rỉ
Gọi dấu vết:
- + 0x196 callq "DYLD-STUB $$ NSManagedObjectContext.fetch (NSFetchRequest) ném -> [A]"
- + 0x8c callq "_arrayForceCast ([A]) -> [B]"
- + 0xde callq "Collection.map ((A.Iterator.Element) ném -> A1) ném -> [A1]"
- + 0x19e callq "ContiguousArray.reserveCapacity (Int) ->()"
- + 0xaa callq "_ContiguousArrayBuffer.init (uninitializedCount: Int, minimumCapacity: Int) -> _ContiguousArrayBuffer"
- + 0x42 callq "ManagedBufferPointer.init (_uncheckedBufferClass: AnyObject.Type, minimumCapacity: Int) -> ManagedBufferPointer"
- + 0x0F callq "swift_slowAlloc"
- + 0x04 callq "DYLD-STUB $$ malloc"
- + 0x13 callq "Malloc_zone_malloc"
- + movzbl 0x8f 71.543 (% rip),% eax
Edit:
Tôi Hơn nữa điều tra mã và tôi phát hiện ra rằng rò rỉ thực sự là khi tôi cố ép buộc loại truyền [Bất kỳ] thành [AnyObject] trong yêu cầu tìm nạp coredata
func fetchEntity<T: NSManagedObject>(entityClass:T.Type,setPredicate:NSPredicate?) -> [AnyObject]
{
let entityName = NSStringFromClass(entityClass)
let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: entityName)
fetchRequest.predicate = setPredicate
fetchRequest.returnsObjectsAsFaults = false
var result:[AnyObject] = []
do
{
result = try cdh.managedObjectContext.fetch(fetchRequest) --> right here is the leak, when i cast the return object of [Any] to [AnyObject]
}catch let error as NSError
{
debugPrint("error in fetchrequest is",error)
result = []
}
return result
}
EDIT: @ Jon, Kuba
Model.getEntities(entityType: EX_TEACHER.self, completion: {[unowned self] entityobjects in
self.teacherList = entityobjects
})
// trong mô hình lớp
class func getEntities<T: NSManagedObject>(entityType: T.Type,completion: ([AnyObject]) -> Void)
{
let teacherList = coreDataOperation.fetchEntity(entityClass: entityType, setPredicate: nil)
completion(teacherList)
}
// cdh.managedObjectContext đang
lazy var cdh:CoreDataStore = {
let cdh = CoreDataStore()
return cdh
}()
class CoreDataStore: NSObject{
lazy var managedObjectContext: NSManagedObjectContext = {
// Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}() }
Hãy dán một mã khi u're gọi fetchEntity func này. Bạn đang thực hiện bộ chọn? Lấy unretainedValue? – Kuba
Bạn đang sử dụng ngữ cảnh nào để tìm nạp? những gì vừa được tạo cho lần tìm nạp này? –
được chỉnh sửa bằng mã được yêu cầu. – iSwift