【问题标题】:How do I fix this leak while using properties?如何在使用属性时修复此泄漏?
【发布时间】:2013-01-21 18:51:49
【问题描述】:

由于我通常使用 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;
}

【问题讨论】:

标签: ios properties memory-leaks


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-28
        • 1970-01-01
        相关资源
        最近更新 更多