2010-01-22 63 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