Ich entwickle eine Cocoa-App, und bei der Ausführung meiner App in Xcode bekomme ich manchmal die folgenden Arten von Nachrichten in der Debug-Konsole:Cocoa-Entwicklung: malloc: free_garbage: Müll ptr = 0x18a15e0, hat nicht-null refcount = 1 Fehler
<
Meine App-Name>
(952,0xb0103000) malloc: free_garbage: Müll ptr = 0x107b2f0, hat nicht Null refcount = 1
ich schaltete MallocStackLogging und NSZombieEnabled und tat ein malloc_history auf ein paar dieser Adressen und erhielt Spuren in Anlehnung an das Zitat von th e unten.
Der allgemeine Thread scheint in allen Blöcken mit dem Fehler Verweise auf NSPopupButtonCell zu sein.
Meine Vermutung ist, dass es etwas zu tun ist CFRetained irgendwo aber nicht freigegeben oder Müll sammelbar gemacht.
A) Ist dies eher ein Programmierfehler von mir oder etwas in dem Framework, das noch nicht richtig für den GC aktualisiert wurde?
B) Was sind die Konsequenzen des Problems, das diese Nachricht provoziert, wenn überhaupt? Muss ich auf diese Nachricht achten oder kann ich sie einfach ignorieren?
Anruf [2] [arg = 48]: thread_a003d720 | start | Haupt | NSApplicationMain | - [NSApplication run] | - [NSApplication nextEventMatchingMask: bisDatum: inMode: aus der Warteschlange:] | _DPSNextEvent | BlockUntilNextEventMatchingListInMode | ReceiveNextEventCommon | RunCurrentEventLoopInMode | CFRunLoopRunInMode | CFRunLoopRunSpecific | __CFRunLoopDoObserver | _handleWindowNeedsDisplay | - [NSWindow displayIfNeeded] | - [NSView displayIfNeeded] | - [NSView _displayRectIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView:] | - [NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayRectIfNeededIgnoringOpacity: isVisibleRect: rectIsVisibleRectForView: topView:] | - [NSView _recursiveDisplayAllDirtyWithLockFocus: visRect:] | - [NSView _drawRect: clip:] | - [NSControl drawRect:] | - [NSMenuItemCell drawWithFrame: inView:] | - [NSPopUpButtonCell _drawIndicatorWithFrame: inView:] | - [NSPopUpButtonCell _indicatorFrameForCellFrame: inView:] | - [NSPopUpButtonCell _indicatorFrameForCellFrame: isFlipped:] | - [NSPopUpButtonCell _defaultIndicatorImage] | - [NSPopUpButtonCell _coreUIDefaultIndicatorImage] | + [NSImage imageNamed:] | + [NSImage _coreUIImageWithName:] | + [NSImage _coreUIImageWithBaseName: state: backgroundStyle:] | - [NSCoreUIImageRep imageWithoutEffectsRect] | SizeForImageOptions | CUICopyMeasurements | CUIRenderer :: CopyMeasurements (CGRect, CGContext *, __CFDictionary const *, __CFArray const *) | CUIRenderer :: CopyImageMeasurements (lang, CUIContext const *, __CFArray const *, __CFDictionary *) | CreateImageSourceFromDisk (lang, CUIContext const *, lang *, unsigniert char *) | CUISharedArtReader :: CreateImageSource (lang) | CGImageSourceCreateWithDataProvider | CGImageReadCreateWithProvider | CGImageReadCreateWithData | _CGImageReadCreate | _CFRuntimeCreateInstance | CFAllocatorAllocate | auto_zone_allocate_object Aufruf [4] [arg = 0]: thread_b0103000 | thread_start | _pthread_start | auto_collection_thread (void *) | auto_collect_with_mode (Auto :: Zone *, unsigned int) | auto_collect_internal (Auto :: Zone *, int)
Das ist genau das, was ich wissen musste, und diese App sieht so aus, als wäre sie ein guter Weg, um die Nachrichten loszuwerden. Vielen Dank! –
Nur ein Hinweis, dass QuietXcode nur die von Xcode stammenden Nicht-Null-Retain-Count-Nachrichten zu beruhigen scheint, nicht die aus meiner App. Trotzdem lohnt sich die Installation. –