我在下面的代码中得到分配计数加一。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"MasterViewIdentifier"] autorelease];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellEditingStyleNone;
UIView* elementView = [ [UIView alloc] initWithFrame:CGRectMake(5,5,312,480)];
elementView.tag = 0;
[cell.contentView addSubview:elementView];
[elementView release];
}
UIView* elementView = [cell.contentView viewWithTag:0];
for(UIView* subView in elementView.subviews)
{
[subView removeFromSuperview];
}
if(indexPath.section==0)
{
if(indexPath.row==0)
{
// i have tried like this but getting exception.
/*
UIImage *cellBackImag=[UIImage imageNamed:@"celltop.png" ];
UIImageView* imaeView=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 43)];
imaeView.image=cellBackImag;
[elementView addSubview:imaeView];
[imaeView release];
[cellBackImag release];
*/
// here I am getting uiimage count allocation count
UIImageView* imaeView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"celltop.png" ]];
imaeView.frame=CGRectMake(0, 0, 300, 43);
[elementView addSubview:imaeView];
[imaeView release];
请帮帮我,谢谢你, Madan Mohan
答案 0 :(得分:2)
首先,你不应该依赖保留计数,因为当你将对象传递给某个方法时,所有事情都可能发生在这个对象上,就像有人保留它,再次自动释放它,将它传递给另一个方法等等所以价值非常不准确。
但在这种情况下,(至少)+1的保留计数是正确的,因为您希望将图像视图作为子视图添加到elementView
后保持活动状态,因此{{1}保留您的图像视图(为保留计数添加+1),然后再次释放它(从alloc init保留+1)。
您使用已注释掉的代码获得异常的原因是您为[element addSubview:imageView]
创建了一个自动释放的对象,然后将其释放。在您的方法返回后,自动释放池将在某个时刻再次释放图像,然后它将崩溃。
所以基本上只是坚持使用第二种方法(alloc,init,add,release)并忘记保留计数。如果你担心内存泄漏,你应该看看Instruments,这是一个很好的工具,可以找到各种错误。