XCode でメモリ リークの問題に直面しています。アナライザーによって指摘されたすべての問題を解決するために最善を尽くしました。プロジェクトは ARC 管理下にあり、XCode 4.6.3、Parse.framework 1.2.11 です。
この問題は、Parse.com フレームワークの使用と組み合わせて発生しているようです (少なくともメソッドの名前は、PF_SBJsonParser を示唆しています)。私はSBJsonParserを単独で使用していません.grepを使用すると、プロジェクトに含まれるParseバイナリファイル(約17MB)の一部であることがわかりました。
私はSOに関する多くのトピックを調べましたが、SBJsonParserは過去にメモリリークに苦しんでいるようです.また、ライブラリに焦点を当てず、ライブラリからのデータをどのように処理するかを確認することを提案しました. 私はそれを試しましたが、それを引き起こすはずの異常は見られません。主な問題は、メモリ リーク インストゥルメントの行をクリックするときに常に「アセンブラ」と呼ばれるため、問題のあるコード行を特定できないことです。
メモリ リーク装置から 2 つの印刷画面を添付しています。正しい方向への提案やポインタをいただければ幸いです。
バックトレースによるリーク
Leaked Object # Address Size Resp. Library Responsible Frame
__NSCFString 32 < multiple > 1.00 KB Foundation -[NSPlaceholderMutableString initWithCapacity:]
__NSCFString 113 < multiple > 3.44 KB MyLib -[PF_SBJsonParser scanRestOfDictionary:]
__NSCFString 367 < multiple > 11.47 KB Foundation -[NSPlaceholderMutableString initWithCapacity:]
Malloc 176 Bytes 6 < multiple > 1.03 KB MyLib +[PFInternalUtils decodeDictionary:]
__NSCFString 64 < multiple > 2.00 KB Foundation -[NSPlaceholderMutableString initWithCapacity:]
Malloc 32 Bytes 13 < multiple > 416 Bytes MyLib -[PF_SBJsonParser scanRestOfArray:]
Malloc 32 Bytes 359 < multiple > 11.22 KB MyLib -[PF_SBJsonParser scanRestOfString:]
NSMutableArray 21 < multiple > 672 Bytes MyLib -[PF_SBJsonParser scanRestOfArray:]
Malloc 176 Bytes 7 < multiple > 1.20 KB MyLib +[PFInternalUtils decodeDictionary:]
Malloc 64 Bytes 21 < multiple > 1.31 KB MyLib -[PF_SBJsonParser scanRestOfDictionary:]
__NSDictionaryM 7 < multiple > 224 Bytes MyLib +[PFInternalUtils decodeDictionary:]
Malloc 64 Bytes 20 < multiple > 1.25 KB MyLib -[PF_SBJsonParser scanRestOfDictionary:]
__NSDictionaryM 21 < multiple > 672 Bytes MyLib -[PF_SBJsonParser scanRestOfDictionary:]
Malloc <> 32 < multiple > 1.20 KB MyLib -[PF_SBJsonParser scanRestOfString:]
Malloc <> 63 < multiple > 2.53 KB MyLib -[PF_SBJsonParser scanRestOfString:]
__NSCFString 49 < multiple > 784 Bytes MyLib -[PF_SBJsonParser scanRestOfDictionary:]
NSDecimalNumber 29 < multiple > 464 Bytes Foundation -[NSDecimalNumberPlaceholder initWithDecimal:]
Malloc <> 7 < multiple > 1.66 KB MyLib -[PF_SBJsonParser scanRestOfArray:]
コール ツリー
Bytes Used # Leaks Symbol Name
29.42 KB 69.2% 917 -[PF_SBJsonParser scanRestOfString:]
29.42 KB 69.2% 917 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfArray:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfDictionary:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfDictionary:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfDictionary:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfArray:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfDictionary:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanRestOfDictionary:]
22.69 KB 53.4% 726 -[PF_SBJsonParser scanValue:]
22.69 KB 53.4% 726 -[PF_SBJsonParser fragmentWithString:]
22.69 KB 53.4% 726 -[PF_SBJsonParser objectWithString:]
22.69 KB 53.4% 726 +[PFInternalUtils parseJSON:]
22.69 KB 53.4% 726 __54+[PFNetworkCommandRunner runCommandAsync:inOperation:]_block_invoke
組み立て
+0x1eb movl $0, -44(%ebp)
+0x1f2 jmp __54+[PFNetworkCommandRunner runCommandAsync:inOperation:]_block_invoke +0x269
+0x1f4 movl 28(%ebx), %eax
+0x1f7 movl 4290952(%edi), %ecx
+0x1fd movl %ecx, 4(%esp)
+0x201 movl %eax, (%esp)
+0x204 calll DYLD-STUB$$objc_msgSend
+0x209 movl %eax, (%esp)
+0x20c calll DYLD-STUB$$objc_retainAutoreleasedReturnValue
+0x211 movl %eax, -44(%ebp)
+0x214 movl 4300120(%edi), %edx
+0x21a movl 4287040(%edi), %ecx
+0x220 movl %eax, 8(%esp)
+0x224 movl %ecx, 4(%esp)
+0x228 movl %edx, (%esp)
+0x22b calll DYLD-STUB$$objc_msgSend <<< marked as an issue (98.4%)
+0x230 movl %eax, (%esp)
+0x233 calll DYLD-STUB$$objc_retainAutoreleasedReturnValue
+0x238 movl %eax, %ebx
+0x23a movl 4300120(%edi), %eax
+0x240 movl 4288668(%edi), %ecx
+0x246 movl %ebx, 8(%esp)
+0x24a movl %ecx, 4(%esp)
+0x24e movl %eax, (%esp)
+0x251 calll DYLD-STUB$$objc_msgSend <<< marked as issue (1.6%)
+0x256 movl %eax, (%esp)
+0x259 calll DYLD-STUB$$objc_retainAutoreleasedReturnValue
+0x25e movl %eax, -52(%ebp)
+0x261 movl %ebx, (%esp)
+0x264 calll DYLD-STUB$$objc_release
アップデート
ちょっとした背景 - 属性「userId」(User へのポインタ) を持つ DB クラス User と DB クラス AdListing があります。少し掘り下げた後、修正方法はわかりませんが、問題のある行を見つけたと思います... includeKey はかなり多くのリークを生成するようです. 、コメント解除すると、上記の共有リークが生成されます。
PFQuery *adQuery = [PFQuery queryWithClassName:@"AdListing"];
[adQuery includeKey:@"userId"]; // <== troublemaker
[adQuery whereKey:@"isActivated" equalTo:[NSNumber numberWithBool:YES]];
[adQuery whereKey:@"isRejected" equalTo:[NSNumber numberWithBool:NO]];
[adQuery whereKey:@"userId" notEqualTo:[PFUser currentUser]];
[adQuery setLimit: VERTICAL_SCROLL_STEP];
[adQuery orderByAscending:@"dateAvailableStart"];
[adQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
// The find succeeded.
NSLog(@"Successfully retrieved %d scores.", objects.count);
}
}];
ヒントや提案は大歓迎です、ありがとう!