0

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

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

那么object的retaincount为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后,也会发生内存泄漏。为什么?

4

3 回答 3

1

当您执行 [smth addObject: obj].

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

于 2011-04-28T12:37:05.310 回答
0

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

于 2011-04-28T12:07:02.867 回答
0

在下面的语句中,您已经分配了对象,然后保留计数将增加 1,这就是您得到 1 的原因。

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

在下一个陈述中,我认为 faceColor 是NSMutableArray

[faceColor addObject:ob1];

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

这就是原因,你有保留计数 2。

编辑:

这是苹果所说的。

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

于 2011-04-28T12:06:48.750 回答