2017-03-10 1 views
0

私はシンプルなNSCollectionViewを持っていて、それぞれがチェックボックスとその下のタイトルを持つ一連のイメージを表示しています。私はLeaksプロファイリングツールを使って実行しましたが、いくつかのリークがあります。私は漏れがどこから来たのかを理解しようとしています。漏れのスタックトレースにコードが表示されないためです。たとえば、コレクションにいくつかのアイテムを表示するだけで、イメージを選択してウィンドウを閉じると、1539個のオブジェクトが漏れてしまいます。NSMutableIndexSetこれらのリークのためのスタックトレースのほとんどは、次のようになります。NSCollectionViewを使用しているときにリークが見られる

0 libsystem_malloc.dylib malloc_zone_calloc 
1 libsystem_malloc.dylib calloc 
2 libobjc.A.dylib class_createInstance 
3 Foundation NSAllocateObject 
4 AppKit -[NSCollectionViewLayoutAccessibility _visibleSections] 
5 AppKit -[NSCollectionViewLayoutAccessibility _dumpVisibleChildren] 
6 AppKit -[NSCollectionViewLayoutAccessibility accessibilityInvalidateLayout] 
7 AppKit -[NSCollectionView layout] 
8 AppKit -[NSView _doLayout] 
9 AppKit -[NSView _layoutSubtreeWithOldSize:] 
10 AppKit -[NSView _layoutSubtreeWithOldSize:] 
11 AppKit -[NSView _layoutSubtreeWithOldSize:] 
12 AppKit -[NSView _layoutSubtreeWithOldSize:] 
13 AppKit -[NSView _layoutSubtreeWithOldSize:] 
14 AppKit -[NSView _layoutSubtreeWithOldSize:] 
15 AppKit -[NSView _layoutSubtreeWithOldSize:] 
16 AppKit -[NSView _layoutSubtreeWithOldSize:] 
17 AppKit -[NSView _layoutSubtreeWithOldSize:] 
18 AppKit -[NSView layoutSubtreeIfNeeded] 
19 AppKit -[NSWindow(NSConstraintBasedLayout) _layoutViewTree] 
20 AppKit -[NSWindow(NSConstraintBasedLayout) layoutIfNeeded] 
21 AppKit ___NSWindowGetDisplayCycleObserver_block_invoke6358 
22 AppKit __37+[NSDisplayCycle currentDisplayCycle]_block_invoke 
23 QuartzCore CA::Transaction::run_commit_handlers(CATransactionPhase) 
24 QuartzCore CA::Context::commit_transaction(CA::Transaction*) 
25 QuartzCore CA::Transaction::commit() 
26 QuartzCore CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 
27 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
28 CoreFoundation __CFRunLoopDoObservers 
29 CoreFoundation CFRunLoopRunSpecific 
30 HIToolbox RunCurrentEventLoopInMode 
31 HIToolbox ReceiveNextEventCommon 
32 HIToolbox _BlockUntilNextEventMatchingListInModeWithFilter 
33 AppKit _DPSNextEvent 
34 AppKit -[NSApplication _nextEventMatchingEventMask:untilDate:inMode:dequeue:] 
35 AppKit -[NSApplication run] 
36 AppKit NSApplicationMain 
37 libdyld.dylib start 

マイコレクションビューのデータソースとデリゲートのコードは非常に簡単です。私はなぜこれらが漏れているのか理解していない。誰も私がここで何が起こっているのか理解するのを助けることができる?

私のコードでは、NSMutableIndexSetオブジェクトをいくつか割り当てていますが、それらは自動リリースされたインスタンスなので、それらを漏らさないでください。 (また、スタックトレースは、私のコードがそれらを作成する場所から来ていないことを示しているので、関連していないようです。) Xcode 8.2.1とMacOS 10.11.6(El Capitan)で動作します。

リークの1つまたは2つは、スタックトレースに2行のコードを表示します。基本的には、ウィンドウコントローラの-loadWindowメソッドへの呼び出しがスタックの途中に表示されます。これらのリークが表示されたときにウィンドウの割り当てが解除されないので、ウィンドウに保持されているものがメモリに残っていれば、メモリに残ります(したがってリークはありません)。

答えて

0

シエラに固定されているエル・キャピタンで知られている漏れがAppleの開発者向けフォーラムでthis discussionによると、あることが表示されます:

私はもはやXcodeで楽器にプロファイリングする際に漏れを見ていますシエラの8。それは実際にそれを修正したように見えます。ありがとうApple

関連する問題