1

私はsimpleFTPを使用して文書情報を要求しています。以下のように、計器でメモリリークを検出します。

ここに画像の説明を入力

そして、コール ツリーで、メモリ リークが発生した場所を特定します。

ここに画像の説明を入力

メソッド「_parseListData」は次のとおりです。

- (void)_parseListData
{
    NSMutableArray *    newEntries;
    NSUInteger          offset;

    // We accumulate the new entries into an array to avoid a) adding items to the 
    // table one-by-one, and b) repeatedly shuffling the listData buffer around.

    newEntries = [NSMutableArray array];
    assert(newEntries != nil);

    offset = 0;
    do {
        CFIndex         bytesConsumed;
        CFDictionaryRef thisEntry;

        thisEntry = NULL;

        assert(offset <= self.listData.length);
        bytesConsumed = CFFTPCreateParsedResourceListing(NULL, &((const uint8_t *) self.listData.bytes) [offset], self.listData.length - offset, &thisEntry);
        if (bytesConsumed > 0) {
........
}

この問題を解決する方法がわかりません。

メソッド " CFFTPCreateParsedResourceListing" はシステム メソッドであり、作成します__NSDate( 2 番目の写真を参照)。

ここでメモリリークが発生します。

4

2 に答える 2

0

このCFFTPCreateParsedResourceListing関数は、おそらくオブジェクトを含む変数にaCFDictionaryを返します。thisEntryNSDate

CFReleaseコードが終了しthisEntryたら、コードを呼び出す必要があります。

// once we're done with thisEntry
if (thisEntry) {
    CFRelease(thisEntry);
}
于 2012-06-11T08:05:20.290 に答える