Iphone 目标C:处理对NSMutableArray中从中删除的对象的引用
我有一个Iphone 目标C:处理对NSMutableArray中从中删除的对象的引用,iphone,ios,objective-c,nsarray,nsmanagedobject,Iphone,Ios,Objective C,Nsarray,Nsmanagedobject,我有一个NSMutableArray的Person(NSManagedObject),它是UIViewControllerpersonviewcontroller(显示为模式)的属性,用作UITableView的数据源,用于列出所有人员。 阵列由核心数据填充。在didselectrowatinexpath上,我设置了selectedPerson,这是presentingViewController中的一个强大的非原子属性 在PersonView控制器中,用户可以从UITableView中删除项目
NSMutableArray
的Person
(NSManagedObject
),它是UIViewController
personviewcontroller(显示为模式)的属性,用作UITableView的数据源,用于列出所有人员。
阵列由核心数据填充。在didselectrowatinexpath
上,我设置了selectedPerson
,这是presentingViewController中的一个强大的非原子属性
在PersonView控制器中,用户可以从UITableView中删除项目。如果从数组中删除的项恰好是selectedPerson指向的对象,我如何处理引用?由于您使用的是属性,如果选择了,只需将其设置为nil即可
[personsArray removeObject:personToDelete];
if (self.selectedPerson == personToDelete)
self.selectedPerson = nil;
这将释放它,并且它将被解除锁定。因为您对所选对象具有强引用,所以在删除过程中从数组中删除person对象不会影响所选的person 根据ARC,若对象至少有一个强引用,则该对象将驻留在内存中。因此,在您的情况下,从数组中删除person将取消数组对person对象的强引用,但您仍然有一个使用所选person指针的强引用
因此,被选中的人成为留在记忆中的优秀候选人,你可以毫无恐惧地使用它。简短的答案是
selectedPerson=nil代码>
在ARC下,将删除对对象的强引用,以便将其从内存中删除
在您的代码中,您可以进行测试
if ( selectedPerson )
{
/* do something to that selected person */
}
看看你是否还有一个被选中的人。哇,太简单了!我为什么不试试呢。我想我不确定==是否有效。非常感谢@jv360不幸的是,由于selectedPerson是一个NSManagedObject
访问对象时,属性不再可访问,返回a。