我创建了一堆对象,现在必须编写多行来释放它们。
[Object1 release];
[Object2 release];
...
[ObjectN release];
如何使用一行释放所有内容?
答案 0 :(得分:1)
可能有一种方法可以使用1行释放多个对象,但我不推荐它。有一种安全释放对象的好方法:
#define RELEASE_SAFELY(__POINTER) { [__POINTER release]; __POINTER = nil; }
<强>用法:强>
RELEASE_SAFELY( myObject );
答案 1 :(得分:0)
#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
答案 2 :(得分:0)
这里有一些直接的编码答案,只是想添加一些其他方法。
您可以在创建时自动释放对象,并将它们添加到数组或其他集合中。数组保留对象,dealloc方法释放数组,数组释放所有对象。类似于自动释放池。
其次,对象生命周期是什么?如果你有一个创建所有对象的循环,你只需要一次创建/使用/ dealloc或在循环中重用,例如
for(...)
{
[[object init] alloc];
[object method];
[object release];
}
甚至
[[object init] alloc];
for(...)
{
[object setProperties];
[object method];
}
[object release];