0

我有一个NSMutableArrayof Person( NSManagedObject),它是 PersonsViewController 的一个属性UIViewController(显示为模态),并用作 UITableView 的数据源以列出所有人员。该数组由 Core Data 填充。On didSelectRowAtIndexPathI set selectedPersonwhich is an strong, nonatomic property in the presentingViewController.

在 PersonsViewController 中,用户可以从 UITableView 中删除项目。selectedPerson如果从数组中删除的项目恰好是 selectedPerson 指向的对象,我该如何处理引用?

4

3 回答 3

2

由于您使用的是属性,因此如果选择它,只需将其设置为 nil ...

[personsArray removeObject:personToDelete];
if (self.selectedPerson == personToDelete)
    self.selectedPerson = nil;

那应该释放它并且它应该被释放...

于 2013-04-19T09:35:48.067 回答
0

由于您对所选对象具有强引用,因此在删除期间从数组中删除人员对象不会影响所选人员。

根据 ARC,如果对象至少有一个强引用,它将驻留在内存中。因此,在您的情况下,从数组中删除人员将取消数组对人员对象的强引用,但您仍然有一个使用选定人员指针的强引用。

因此,选定的人成为留在记忆中的有效候选人,您可以无所畏惧地使用它。

于 2013-04-19T09:38:57.457 回答
0

简短的回答是selectedPerson = nil;

在 ARC 下,它将删除对对象的强引用,以便可以将其从内存中删除。

在您的代码中,您可以测试

if ( selectedPerson ) 
{
    /* do something to that selected person */
}

看看你是否还有一个选定的人。

于 2013-04-19T09:40:48.867 回答