簡體   English   中英

死后的物體壽命(保留計數= 0)

[英]Object life after death (retain count = 0)

我剛剛在一些已經工作了數月的代碼中注意到了這一點。 雖然這讓我很好奇但我確信我們一直生活在借來的時間......

假設activeItem

@property (nonatomic, retain) ItemView *activeItem;

我們在touchesEnded中有這個條件:

if (CGRectContainsPoint(dropRect, touchLocation)) {
    ItemView *replacementItem = [[ItemView alloc] initWithFrame:frame];

    [newItems replaceObjectAtIndex:[newItems indexOfObject:activeItem] withObject:replacementItem];

    [self addSubview:replacementItem];
    [controller.view.subView addItem:activeItem];
    [replacementItem goCenter];
    [replacementItem release];
}

唯一保留activeItem的是NSArray, newItems 我應該在調用replaceObjectAtIndex之前保留它,然后在釋放replacementItem時釋放它嗎? 其他方式?

似乎工作正常,但EXC_BAD_ACCESS不是時間問題嗎?!?

我的猜測是你有某個地方有activeItem = something而不是self.activeItem = something

不同之處在於“自”點版本通過合成的mutator(setter)方法,該方法在分配給ivar之前執行保留。 這假定您有一個合成方法或手動構造的方法,它可以完成財產所聲稱的方法。

它可能沒有任何區別,因為你可能只是將它用作弱引用。 如果您確實需要弱引用,則可能需要更改該保留以分配和讀取弱引用的Objective-C約定。

(在這種情況下,看起來你正在使用activeItem更像是某個東西的索引,而不是設計為“擁有”該對象的“容器”,這使得它成為弱引用的場景,如果你想要的話對於。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM