2

私はそれが非常に基本的な質問であることを知っています。明確にする必要があるいくつかのメモリの問題があります。ここに私の疑問があります:

int *p = malloc (50); // will allocate 50 bytes and it is pointed by p.

// Freeing C pointer-->

free(p);

Objective-Cのポインタ:

ClassAobject *objA = .... // allocated ClassAobject..

// Freeing obj-C pointer--->

objA = nil // Is it enough??? will it release all ivars memory properly..

もしそうなら、Objective Cクラス内にいくつかのCポインターがある場合はどうなりますか?ARCでこれを処理する方法

4

2 に答える 2

9

タイトルはあなたが求めているものを反映していません。Cポインタと「Objective-Cポインタ」の間に違いはありません。本当にそれらは単なる古いCポインタです。

あなたが求めているのは、それらの正しい使用法の違いです。ポインタがObjective-Cオブジェクトを指している場合、MRCの下で次のことを行う必要があります。

[obj release];

参照カウントを減らす(潜在的に割り当てを解除する可能性があります)。ARCでは、ポインタをに設定するnilだけで十分です(例のように)。

于 2013-02-05T06:42:10.510 に答える
0

「Cポインタ」と「Objective-Cポインタ」に違いはありません。void*とint*は、CとObjective-Cでまったく同じです。

ただし、ARCを使用する場合、一部のポインタタイプはARCによって特別に処理されます。これらのポインタタイプは次のとおりです。

id
Pointers to Objective-C objects like NSString*
Class
Blocks

これらはすべて、参照カウントされるさまざまな種類のObjective-Cオブジェクトへのポインタです。ARCは、これらのオブジェクトへの参照がいくつ存在するかを自動的に追跡し、最後の参照が削除されると、オブジェクト自体の割り当てが解除されます。

オブジェクトの割り当てが解除されると、ARCは参照したオブジェクトへのすべての参照を自動的に削除します。ただし、オブジェクトにARCの制御下にないポインターがある場合は、deallocで必要なことをすべて実行する必要があります。

于 2014-03-22T13:54:43.887 に答える