我仍然对内存管理的一些微妙方面感到不安,我有一个关于我在某些示例代码中看到的积极保留/释放的问题。具体做法是:iPhone内存管理问题:保留迭代的UITableViewCells?
- (void)loadContentForVisibleCells
{
NSArray *cells = [self.tableView visibleCells];
[cells retain];
for (int i = 0; i < [cells count]; i++)
{
// Go through each cell in the array and call its loadContent method if it responds to it.
FlickrCell *flickrCell = (FlickrCell *)[[cells objectAtIndex: i] retain];
[flickrCell loadImage];
[flickrCell release];
flickrCell = nil;
}
[cells release];
}
为什么[保留/释放]关于FlickrCell(线8 & 10)周期?单元格在NSArray中,根据定义,它保留了其内容(我认为...?),并保留了NSArray本身。为什么这些额外的保留是必要的?
此外,为什么保留在[self.tableView visibleCells](第3行)返回的NSArray上?在这个方法调用期间,数组是否保证不在?
非常感谢。
好的,谢谢。我觉得我对内存管理有相当的了解,但是当我看到这样的代码时,我开始怀疑。 – 2009-12-11 22:05:56