私はたくさんのオブジェクトを作成し、それらを解放するために複数の行を書く必要があります。Objective-Cで複数のオブジェクトを1行でリリースできますか?
[Object1 release];
[Object2 release];
...
[ObjectN release];
1行ですべてをリリースするにはどうすればよいですか?
私はたくさんのオブジェクトを作成し、それらを解放するために複数の行を書く必要があります。Objective-Cで複数のオブジェクトを1行でリリースできますか?
[Object1 release];
[Object2 release];
...
[ObjectN release];
1行ですべてをリリースするにはどうすればよいですか?
1行で複数のオブジェクトを解放する方法がありますが、推奨しません。安全にオブジェクトを解放するための良い方法があります:
#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
は使用方法:両方の長所を持っていないのはなぜ
RELEASE_SAFELY(myObject);
#define foreach(item, array) \
for(int keep = 1, \
i= 0,\
size = sizeof (array)/sizeof *(array); \
keep && i != size; \
keep = !keep, i++) \
for(item = array + i; keep; keep = !keep)
#define RELEASE_ALL(OBJS...) ({id objs[]={OBJS}; \
foreach(id* v, objs) { RELEASE_SAFELY(*v); }})
? RELEASE_SAFELY
一度に(WrightsCSのおかげで)すべてのオブジェクト:
RELEASE_ALL(Object1, Object2, Object3) // etc
ここにいくつかの直接のコーディングの答えはいくつかの他の方法を追加したい、あります。
作成時にオブジェクトを自動リリースし、配列やその他のコレクションに追加することができます。配列はオブジェクトを保持し、deallocメソッドは配列を解放し、配列はすべてのオブジェクトを解放します。自動解放プールに似ています。
第2に、オブジェクトライフサイクルは何ですか?あなたはすべてのオブジェクトを作成するループを持っていて、それらだけを必要とする時に1つの場合は、ループ内/使用/のdeallocや再利用を作成することができ、例えば
for(...)
{
[[object init] alloc];
[object method];
[object release];
}
あるいは
[[object init] alloc];
for(...)
{
[object setProperties];
[object method];
}
[object release];
だけそれらを同じ行に入れてください。 –