2010-01-22 44 views
1

我剛剛在一些工作了幾個月的代碼中注意到了這一點。雖然這讓我好奇的我敢肯定,我們一直生活在借來的時間...死亡後的物體壽命(保留計數= 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之前的時間問題?!?

回答

4

我的猜測是某處你有self.activeItem = somethingactiveItem = something代替

不同的是,「自我」點版本經過這將執行分配給伊娃之前保留合成的突變(setter方法)方法。這假定你有一個合成的方法或手動構建的方法,它可以完成屬性聲明它的任務。

它可能沒有什麼區別,因爲你可能只是將它作爲一個弱引用。如果你真的想要一個弱引用,你可能想要改變這個保留來分配和閱讀Objective-C約定中的弱引用。

(在這種情況下,它看起來像你使用activeItem更像是專爲「自己」的對象的索引到的東西,而不是一個「容器」,這使得它的弱引用一個情況下,如果那是你'打算爲它。)

+0

想通了......你的帖子讓我思考。它仍然被視圖保留... – Meltemi 2010-01-22 04:09:11

+0

另外,iPhone上沒有弱引用(還沒有)(因爲沒有GC ...) – 2010-01-22 04:22:25

+0

Kendall Helmstetter Gelner:你可以有一個弱點(也就是非保留)沒有GC的參考。 '__weak' *關鍵字*僅適用於GC。 – 2010-01-22 05:14:58