我有一个NSMutableArray
Person
(NSManagedObject
),它是UIViewController
PersonsViewController的属性(显示为模态),用作UITableView的数据源列出所有人。
该阵列由Core Data填充。在didSelectRowAtIndexPath
我设置了selectedPerson
,这是presentationViewController中一个强大的非原子属性。
在PersonsViewController中,用户可以从UITableView中删除项目。如果数组中的已删除项恰好是selectedPerson指向的对象,如何处理引用selectedPerson
?
答案 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 */
}
看你是否还有一个选定的人。