1

私は通常ARCを使用しているため、プロパティと手動で物を解放する方法の初心者ですが、この場合はそうではないため、以下のリークを修正する方法について少し助けが必要です. これはプロパティなので、最後にオートリリースを貼り付けるだけですか。私はわかりません!:)

とにかく、誰かがこのリークを適切に取り除く方法を教えてくれたら、それは素晴らしいことです!

- (id)init
{
    self = [super init];

    if (self)
    {
        self.purchasableObjects = [[NSMutableArray alloc] init];

        self.storeObserver = [[ZTStoreObserver alloc] init];
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self.storeObserver];
    }

    return self;
}
4

3 に答える 3

1

これにより、報告された両方のリークが修正されました。

- (id)init
{
    self = [super init];

    if (self)
    {
        NSMutableArray *array = [[NSMutableArray alloc] init];
        self.purchasableObjects = array;
        [array release];

        ZTStoreObserver *observer = [[ZTStoreObserver alloc] init];
        self.storeObserver = observer;
        [[SKPaymentQueue defaultQueue] addTransactionObserver:self.storeObserver];
        [observer release];
    }
    return self;
}
于 2013-01-22T02:00:22.710 に答える
0

self.purchasableObjectsは強力な参照である必要があると思います(弱い場合、このオブジェクトを存続させるための別の強力な参照が存在しない限り、メモリは保持されません)。そうすれば、メモリがリークすることはありませんが、合計メモリフットプリントが増加する可能性があります。 、それは割り当てと呼ばれます。メモリフットプリントを低く保つために、その変数をnilに設定し、その変数を使い終わったら保持サイクルを回避できます。メモリ警告を受け取るまで、この変数を忘れることができます。その時点で、次のことができます。このオブジェクトをnilして、メモリを再利用します

于 2013-01-21T19:02:57.367 に答える
0

それらを失いたくない場合は、強力なものを使用する必要があります。

@property(strong) NSMutableArray *purchasableObjects;
@property(strong) ZTStoreObserver *storeObserver;
于 2013-01-21T18:55:03.107 に答える