1

以下のようにマクロを宣言するサンプル アプリケーションを作成しました。

#define kSampleString @"didReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarningdidReceiveMemoryWarning"

ユーザーが以下のイベント ハンドラーをクリックすると、マクロ文字列がログに記録されます。

-(IBAction)SampleMethod:(id)sender{
    NSLog(@"Log %@",kSampleString);
}

以下は、私が取得した機器データです。

ここに画像の説明を入力 Instrumentsで割り当てを確認すると、以下の情報が得られました。赤い色でマークされた領域の NSLogv 呼び出しで割り当てが行われていることがわかります。しかし、NSLogvに関して起こっている他のことをどのように解釈しますか. それらのmalloc操作は何をしていますか?

4

1 に答える 1

1

Malloc は単に目的 C の alloc の C バージョンであり、alloc が実行されると最終的に呼び出されます。Instruments はアプリ内のすべての割り当てを追跡しているため、Malloc が表示されるのは当然のことです。

CFString に関しては、これは NSString の CoreFoundation のいとこです (NSString は CFString を中心に構築されたクラス クラスターであるため)。アプリでメモリ リークが発生している場合は問題になりますが、現時点では問題ありません。

私が心配しているのは、リストのほぼ半分にある 1.5 KB の巨大な文字列 Malloc です。単純な文字列にはメモリが多すぎるようです。

于 2012-05-10T03:22:12.460 に答える