我分配了一个像这样的对象:
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后,也会发生内存泄漏。为什么?
答案 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等容器时,容器会保留添加的对象。那是因为容器现在依赖添加的对象继续存在,只要它在容器内。