我是一个具有属性的菜鸟,以及如何手动释放东西,因为我通常使用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;
}
答案 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,并在完成该变量后避免保留周期。在收到内存警告之前,您可能会忘记此变量指出你可以将这个对象取回来回收内存