对象保留计数

时间:2011-04-28 12:02:12

标签: iphone memory-management memory-leaks retaincount

我分配了一个像这样的对象:

PixelInfo *ob1=[[PixelInfo alloc]initWithName:clr :t];

然后对象的重新计算是1.

然后我确实喜欢这个......

[faceColor addObject:ob1];

然后保留计数增加到2.为什么?

for(b=xi[i];b<=(xi[i+1]+1);b++)
        {   


            CGPoint t;
            t.x=b;
            t.y=y;

            UIColor *clr=nil;
            clr=[self getPixelColorAtLocation:loadImage.CGImage :t];    

             PixelInfo *ob=[[PixelInfo alloc]initWithName:clr :t];                    
             [faceColor addObject:ob];
             [ob release];
          }

这是我的代码。即使在释放对象ob后,也会发生内存泄漏。为什么?

3 个答案:

答案 0 :(得分:1)

所有colllections(Array,Dictionary,Set)会在您执行操作时增加对象的保留计数 [smth addObject: obj]

PS。 AddSubview还会增加子视图的保留计数

答案 1 :(得分:0)

在下面的陈述中,你已经分配了对象,那么保留计数将增加1,这就是你获得的原因是1。

PixelInfo *ob1=[[PixelInfo alloc]initWithName:clr :t];

在下一个声明中,我认为faceColor是NSMutableArray

[faceColor addObject:ob1];

您正在数组中添加对象 ob1 ,因此如果您在数组中添加对象,iOS会将任何对象的保留计数增加1,

这就是原因,你保留了第2名。

<强>编辑:

这就是苹果所说的。

  

重要说明:此方法在调试内存管理问题时通常没有价值。因为任何数量的框架对象可能保留了一个对象以保存对它的引用,而同时自动释放池可能在对象上保留任意数量的延迟版本,所以您不太可能从此获取有用信息方法。

答案 2 :(得分:0)

我认为faceColor是一个NSMutableArray。将对象添加到NSArray或NSDictionary等容器时,容器会保留添加的对象。那是因为容器现在依赖添加的对象继续存在,只要它在容器内。