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

如果你不想松开它们,你应该使用strong。

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

我假设 self.purchasableObjects 必须是强引用(如果是弱引用,则不会保留内存,除非存在另一个强引用来保持该对象存活),那么您不会泄漏内存,但您可能会发现总内存占用增加,这称为分配。为了保持较低的内存占用,您可以将该变量设置为 nil 并在完成该变量后避免保留周期。您可能会忘记此变量,直到收到内存警告,此时您可以nil 这个对象来回收内存

于 2013-01-21T19:02:57.367 回答