我可以在Objective-C中使用一行释放多个对象吗?

时间:2011-01-16 18:45:09

标签: objective-c oop memory-management

我创建了一堆对象,现在必须编写多行来释放它们。

[Object1 release];
[Object2 release];
...
[ObjectN release];

如何使用一行释放所有内容?

3 个答案:

答案 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];