2011-09-10 6 views
1

objective-cのプリミティブ型にメモリを割り当てるベストプラクティスは何ですか?オーケー(mallocとfree)objective-cのプリミティブ型にメモリを割り当てるベストプラクティス

unsigned int* val = malloc(sizeof(unsigned int)); 
free(val); 

Cの割り当てを使用している場合、または任意のOBJ-cは、特定の割り当てはありますか?

AND関数ポインタ自分自身の作成と管理、intへのポインタを期待、あるいは単に通常の変数を作成し、address-of演算子を使用して、そのアドレスを送信する場合より良いです:

最初の形式:

NSScanner* scanner = [NSScanner scannerWithString: @"F"]; 
unsigned int* val = malloc(sizeof(unsigned int)); 
[scanner scanHexInt: val]; 
NSLog(@"%d", *val); 
free(val); 

第二の形式:アロケーションフリーメモリ頭痛から自分自身を解放する第二の形式で

NSScanner* scanner = [NSScanner scannerWithString: @"F"]; 
unsigned int val; 
[scanner scanHexInt: &val]; 
NSLog(@"%d", val); 

マイセルフ。

答えて

3

どちらの形式も有効であり、賛否両論がありますが、最初の例はこの例では余分な作業であり、2番目の形式と比較してパフォーマンスにマイナスの影響があります。

最初の形式では、そのintをヒープに割り当てることになるので、mallocのサブシステムは割り当てが利用可能であることを確認するために簿記を実行する必要があります。また、を覚えておいてを覚えておいてください。

2番目の形式では、割り当てはスタック上で行われます。これはmallocよりも必要な簿記がはるかに少ないためです。また、は、この機能を離れるときに無料で利用できます。

malloc/freeを使用するための主要な時間は、変数のスコープを現在の関数の外側で使用したい場合です。それ以外の場合、関数を終了するとスタックがポップされ、データが失われます。

+0

最後の段落「変数のスコープを現在の関数の外に残しておきたい場合は、malloc/freeを使用するキー時間が最適です」が最適です。 –