如何在使用属性时修复此泄漏?

时间:2013-01-21 18:51:50

标签: ios properties memory-leaks

我是一个具有属性的菜鸟,以及如何手动释放东西,因为我通常使用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;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

@property(strong) NSMutableArray *purchasableObjects;
@property(strong) ZTStoreObserver *storeObserver;

答案 2 :(得分:0)

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