2017-03-07 9 views
10

मैं एक स्मृति रिसाव जो PFBCoreData अनुरोध लायें कास्टिंग [कोई] से [AnyObject] स्मृति रिसाव

को समझने में असमर्थ हूँ का सामना करना पड़ रहा पैदा करता

enter image description here

कॉल ट्रेस: ​​

  1. + 0x196 callq "DYLD-आधार $$ NSManagedObjectContext.fetch (NSFetchRequest) फेंकता है -> [एक]"
  2. + 0x8c callq "_arrayForceCast ([एक]) -> [बी]"
  3. + 0xde callq "Collection.map ((A.Iterator.Element) फेंकता है -> A1) फेंकता है -> [ए 1]"
  4. + 0x19e callq "ContiguousArray.reserveCapacity (इंट) ->()"
  5. + 0xAA callq "_ContiguousArrayBuffer.init (uninitializedCount: इंट, minimumCapacity: इंट) -> _ContiguousArrayBuffer"
  6. + 0x42 callq "ManagedBufferPointer.init (_uncheckedBufferClass: AnyObject.Type, minimumCapacity: इंट) -> ManagedBufferPointer"
  7. + 0x0f callq "swift_slowAlloc"
  8. + 0x04 कॉलक "DYLD-STUB $$ malloc"
  9. + 0x13 कॉलक "Malloc_zone_malloc"
  10. + 0x8f movzbl 71,543 (% RIP),% eax

enter image description here

enter image description here

संपादित करें:

मैं आगे कोड की जांच की और मुझे लगता है कि पता चला वास्तविक रिसाव तब होता है जब मैं कास्टा प्रकार [किसी भी] को [किसी भी ऑब्जेक्ट] को कोर्डटा लाने के अनुरोध में

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 
} 

संपादित करें: // मॉडल वर्ग

class func getEntities<T: NSManagedObject>(entityType: T.Type,completion: ([AnyObject]) -> Void) 
{ 
    let teacherList = coreDataOperation.fetchEntity(entityClass: entityType, setPredicate: nil) 

    completion(teacherList) 

} 

// cdh.managedObjectContext कोड

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 
}() } 
+0

कृपया एक कोड जब u're इस fetchEntity समारोह बुला पेस्ट करें। आप चयनकर्ता कर रहे हैं? अप्रत्याशित Value लेना? – Kuba

+0

आप किस संदर्भ का उपयोग कर रहे हैं? इस fetch के लिए अभी क्या बनाया गया है? –

+0

अनुरोधित कोड के साथ संपादित किया गया। – iSwift

उत्तर

6

बहुत संकलन और Google खोज के बाद। मैंने एक नया एक्सकोड संस्करण 8.3 छोड़ दिया और डाउनलोड किया। (पिछला था 8.1)

फिर मैंने परियोजना को दोबारा शुरू किया और अनुमान लगाया .....? अब कोई लीक नहीं है। अच्छा हम अनुमान लगा सकते हैं कि यह xcode 8.1 संस्करण समस्या थी।

संपादित करें:

डिबगिंग

हल मुद्दे MacOS के लिए मेमोरी डीबगर और iOS सिम्युलेटर प्रकार enum के दोनों क्षेत्रों, या वर्गों है कि वारिस युक्त स्विफ्ट कक्षाओं के लिए झूठी स्मृति लीक की रिपोर्टिंग फिक्स कुछ उद्देश्य-सी ढांचे वर्गों से। (27 9 32061) गलत रिपोर्टिंग आईओएस, वॉचओएस, और टीवीओएस अनुप्रयोगों के लिए अभी भी हो सकती है। नीचे ज्ञात मुद्दों में देखें (2 9 335813)।

ज्ञात मुद्दे आईओएस, watchOS के लिए मेमोरी डिबगर, और tvOS अनुप्रयोगों झूठी स्मृति रिपोर्ट कर सकते हैं लीक जब प्रकार enum के दोनों क्षेत्रों, या वर्गों है कि कुछ ऑब्जेक्टिव-सी फ्रेमवर्क वर्गों से विरासत युक्त स्विफ्ट कक्षाएं डिबगिंग। (29335813)

apple Xcode 8.3 release notes

+0

क्या आपने 8.2 में प्रयास किया था? क्या कोई स्मृति समस्या थी? – Sneha

+0

कुडोस उस के माध्यम से खोदने के लिए और इसे समझने के लिए चिपके हुए। मैंने पुराने संस्करण को कुछ सामान गलत बताया (और कई लोगों को भी इसका उल्लेख करते हुए पढ़ा), लेकिन यह पुष्टि करता है। एक चीज़ कम मुझे खुद के बारे में चिंता करने की ज़रूरत है, मेरी मदद की! – Gero

+0

धन्यवाद .. खुशी है कि आपकी मदद की। मुझे यकीन है कि अधिकतर लोग इस मुद्दे का सामना कर रहे हैं। मुझे उम्मीद है कि उन्हें यहां कुछ मदद मिलेगी। – iSwift

1

में @ जॉन, कुबा

Model.getEntities(entityType: EX_TEACHER.self, completion: {[unowned self] entityobjects in 
      self.teacherList = entityobjects 
    }) 

इस कोड

 do 
     { 

     var result: AnyObject = try cdh.managedObjectContext.fetch(fetchRequest) 
     let resultMirror = Mirror(reflecting: result) 
     print(resultMirror.subjectType) //gives you the return type from coredata 


     }catch let error as NSError 
     { 
      debugPrint("error in fetchrequest is",error) 
      result = [] 
     } 
प्रयास करें
+1

मेरा प्रश्न स्मृति रिसाव के प्रकार के बारे में नहीं था, यह जवाब असंबंधित है, वैसे भी यह दर्पण प्रकार आउटपुट है-> ऐरे iSwift

संबंधित मुद्दे