It looks to me that, in the edge case where user clicks File : Duplicate and then enters a file path/name that already exists in the filesystem, so that Cocoa prompts to "Replace" or "Cancel", the new NSDocument object gets four (4) unbalanced retains, and therefore leaks. This is reproducible in macOS 10.12 or 10.13, Swift or Objective-C, ARC or not.
I say this because a document which has has been created in this way does not dealloc as documents normally do when closed (or a few seconds thereafter), but it does dealloc if I send it four unbalanced -release messages. And if I send it five unbalanced -release messages, a zombie squeals as expected. The `leaks` command-line tool indicates 0 leaks before the File : Duplicate, and 12 leaks after closing the duplicated (and I think leaky) document, including some leaked code blocks, although none of the leaks are a document/NSDocument object per se. If no one can find a mistake in my analysis I’ll file a bug. Jerry Krinock In case you want to see for yourself: https://youtu.be/zSQ1hY7JVZs (03:49) https://github.com/jerrykrinock/LeakyDocumentDemo ACA80004:~ jk$ leaks 4800 Process: LeakyDocSwiftDemo [4800] Path: /Users/jk/Library/Developer/Xcode/DerivedData/LeakyDocumentDemo-ctlrylejnnaaxqddgjsbbjsrcnzy/Build/Products/Debug/LeakyDocSwiftDemo.app/Contents/MacOS/LeakyDocSwiftDemo Load Address: 0x100000000 Identifier: com.sheepsystems.LeakyDocumentSwiftDemo Version: 1.0 (1) Code Type: X86-64 Parent Process: debugserver [4801] Date/Time: 2017-06-30 14:27:22.798 -0700 Launch Time: 2017-06-30 14:24:29.663 -0700 OS Version: Mac OS X 10.12.6 (16G23a) Report Version: 7 Analysis Tool: /Applications/Xcode.app/Contents/Developer/usr/bin/leaks Analysis Tool Version: Xcode 8.3.3 (8E3004b) ---- leaks Report Version: 2.0 Process 4800: 45412 nodes malloced for 6440 KB Process 4800: 12 leaks for 608 total leaked bytes. Leak: 0x608000221f40 size=32 zone: DefaultMallocZone_0x100ea5000 CFString (Storage) C CoreFoundation length: 4 has-length-byte: "doc1" Leak: 0x608000222c40 size=32 zone: DefaultMallocZone_0x100ea5000 __NSExactBlockVariable__ __block variable CoreFoundation 0x00000000 0x00000000 0x00222c40 0x00006080 ........@,"..`.. 0x21000004 0x00000020 0x0045d200 0x00006000 ...! .....E..`.. Leak: 0x608000222c60 size=32 zone: DefaultMallocZone_0x100ea5000 __NSExactBlockVariable__ __block variable CoreFoundation 0x00000000 0x00000000 0x00222c60 0x00006080 ........`,"..`.. 0x21000004 0x00000020 0x00104f01 0x00006000 ...! ....O...`.. Leak: 0x608000256620 size=48 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __75-[NSWindow _titlebarEditingDidEndNormally:title:editingRange:grantHandler:]_block_invoke_3 0x7fff8cb68ce9 Leak: 0x60800025a280 size=48 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __77-[NSDocument duplicateDocumentWithDelegate:didDuplicateSelector:contextInfo:]_block_invoke.2577 0x7fff8c7f24a5 Leak: 0x60800025d220 size=48 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __81-[NSDocument(NSDocumentSerializationAPIs) _activityCompletionHandlerForActivity:]_block_invoke 0x7fff8c89437b Leak: 0x60800025d2e0 size=48 zone: DefaultMallocZone_0x100ea5000 NSMutableArray ObjC CoreFoundation item count: 5 Leak: 0x608000279e80 size=64 zone: DefaultMallocZone_0x100ea5000 CFString ObjC CoreFoundation length: 4 mutable non-inline: "doc1" Leak: 0x608000462880 size=64 zone: DefaultMallocZone_0x100ea5000 _NSDocumentActivity ObjC AppKit 0xa9241079 0x001dffff 0x00000001 0x00000000 y.$............. 0x00000000 0x00000000 0x00464400 0x00006080 .........DF..`.. 0x00000101 0x00000000 0x0025d2e0 0x00006080 ..........%..`.. 0x00465c00 0x00006080 0x00000000 0x00000000 .\F..`.......... Leak: 0x608000464400 size=64 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __77-[NSDocument duplicateDocumentWithDelegate:didDuplicateSelector:contextInfo:]_block_invoke_4 0x7fff8c7f1dd9 Leak: 0x608000465c00 size=64 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __77-[NSDocument duplicateDocumentWithDelegate:didDuplicateSelector:contextInfo:]_block_invoke.2594 0x7fff8c7f27e2 Leak: 0x608000466440 size=64 zone: DefaultMallocZone_0x100ea5000 __NSMallocBlock__ ObjC CoreFoundation AppKit __75-[NSWindow _titlebarEditingDidEndNormally:title:editingRange:grantHandler:]_block_invoke.4316 0x7fff8cb68a73 ACA80004:~ jk$ P.S. Despite all of the Objective-C in that report, I assure you this is my Swift target running :)) _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com