0

次のようなオブジェクトを割り当てました。

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を解放した後でも、メモリリークが発生します.なぜですか?

4

3 に答える 3

1

すべてのコレクション (配列、ディクショナリ、セット) を実行すると、オブジェクトの保持カウントが増加します [smth addObject: obj]

PS。AddSubview もサブビューの保持数を増やします

于 2011-04-28T12:37:05.310 に答える
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 に答える
0

faceColorNSMutableArray だと思います。NSArray や NSDictionary などのコンテナーにオブジェクトを追加すると、コンテナーは追加されたオブジェクトを保持します。これは、コンテナーがコンテナー内にある限り、追加されたオブジェクトが存在し続けることに依存しているためです。

于 2011-04-28T12:07:02.867 に答える