在Objective C开发中,应该会用到NSMutableArray,暂时理解为一个可变长度的数组吧。
这个东东提供了addObject方法,也提供了removeObject方法。问题描述:
在程序设计时,我将一组对象的指针add到了array中,现在array拥有了这些对象的所有权。现在我用removeObject删除某一项,根据removeObject的接口设计,没有返回值,因此我不知道在array中是否有这一项,也不知道是否删除成功了。再这种前提下,更可怕的事情发生了,当前要删除的这一项的对象所有权我怎么确定呢?我既不知道他是否再数组里,也不知道他是否已经被删除。问题:
有什么方法能再次确定所有权归属,既在做完删除操作以后是否能确定remove操作肯定成功了。我想了几种解决方案:一个是不用removeObject方法,直接用for循环查询数组内容比较要删除项,得到index值用removeObjectAtIndex删除。这样所有权归调用方,release掉合情合理。但是这个方法很难看。(NSMutableArray没有提供查询方法,只能for循环,这个可以理解因为不能保证数组有序,也就没有比for更快的查询方法了)第二个方案,还是用removeObject方法,在调用前后比较array数组大小,看看是否有变化,少了一个说明删除成功了,这个方法很二,不是线程安全的。但是代码比第一种方法简洁。不知道是不是我用错了,有经验的朋友有没有更好的解决方法。谢谢。
这个东东提供了addObject方法,也提供了removeObject方法。问题描述:
在程序设计时,我将一组对象的指针add到了array中,现在array拥有了这些对象的所有权。现在我用removeObject删除某一项,根据removeObject的接口设计,没有返回值,因此我不知道在array中是否有这一项,也不知道是否删除成功了。再这种前提下,更可怕的事情发生了,当前要删除的这一项的对象所有权我怎么确定呢?我既不知道他是否再数组里,也不知道他是否已经被删除。问题:
有什么方法能再次确定所有权归属,既在做完删除操作以后是否能确定remove操作肯定成功了。我想了几种解决方案:一个是不用removeObject方法,直接用for循环查询数组内容比较要删除项,得到index值用removeObjectAtIndex删除。这样所有权归调用方,release掉合情合理。但是这个方法很难看。(NSMutableArray没有提供查询方法,只能for循环,这个可以理解因为不能保证数组有序,也就没有比for更快的查询方法了)第二个方案,还是用removeObject方法,在调用前后比较array数组大小,看看是否有变化,少了一个说明删除成功了,这个方法很二,不是线程安全的。但是代码比第一种方法简洁。不知道是不是我用错了,有经验的朋友有没有更好的解决方法。谢谢。
{
NSLog(@"AddressBook removeCard!!");
NSUInteger index = [addressArray indexOfObject: card];
if (index != NSNotFound) {
id temp = [addressArray objectAtIndex: index];
[addressArray removeObjectAtIndex: index];
[temp release];
}
}
这个我觉得靠谱一些。