目标C:处理从NSMutableArray中删除的对象的引用

时间:2013-04-19 09:29:29

标签: iphone ios objective-c nsarray nsmanagedobject

我有一个NSMutableArray PersonNSManagedObject),它是UIViewController PersonsViewController的属性(显示为模态),用作UITableView的数据源列出所有人。 该阵列由Core Data填充。在didSelectRowAtIndexPath我设置了selectedPerson,这是presentationViewController中一个强大的非原子属性。

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

3 个答案:

答案 0 :(得分:2)

由于您正在使用属性,因此如果选择了它,则将其设置为nil ......

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

那应该释放它,它应该得到dealloc' d ...

答案 1 :(得分:0)

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

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

因此,选定的人成为留在记忆中的可靠候选人,你可以毫无恐惧地使用它。

答案 2 :(得分:0)

简短回答是selectedPerson = nil;

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

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

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

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