1

プログラムでいくつかのネットワーク共有をマウントする作業を行っています。URL とユーザー名は、NSString に変更され、使用および解放されるキーチェーンからのパスワードと共に辞書に保存されます。サーバーの実際のマウントまでの唯一のメモリリークを追跡しました。

    error = FSMountServerVolumeSync((CFURLRef) [objects objectForKey:@"url"], NULL, (CFStringRef) [objects objectForKey:@"username"],(CFStringRef) password, NULL, 0);

「url」のオブジェクトは NSURL で、ユーザー名は NSString です。

リーク パフォーマンス ツールでは次のように表示されます: Leaked Object: NSCFString 責任のあるライブラリ: smb、責任のあるフレーム: smb_url_to_dictionary

履歴を見ると、32 バイトの CFString malloc であり、smb および NetFS ライブラリからの CFRetain-CFRelease の 8 回の反復を経て、保持カウントが +1 になります。

Objective-C とメモリ管理は初めてなので、すべて正しいことをしていると思っていましたが、割り当てられたものをすべてリリースしましたが、このリークがどのように発生しているのか本当にわかりません。

FSMountServerVolumeSync に、このリークの原因となるトリッキーな何かがありますか?

実行時にメモリの場所を調べて、リークの原因を確認するために何があるかを判断する方法はありますか?

また、NSCFは何の略ですか?

助けてくれてありがとう

4

0 に答える 0