在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数组大小,看看是否有变化,少了一个说明删除成功了,这个方法很二,不是线程安全的。但是代码比第一种方法简洁。不知道是不是我用错了,有经验的朋友有没有更好的解决方法。谢谢。
解决方案 »
- 请问想做一套能用WINXP和IPAD上都能用的进销存软件,应该用那种开发.
- iphone邮件客户端
- xcode下不能直接给wstring赋值么?如:std::wstring sz=L"abc123你我他"
- 没有苹果的ID就不能下载IOS的SDK开发包吗?
- 书上例程,提示Tread 1:Program received signal:"SIGABRT"难道是链接没有链接好?
- 不能用marsedit来发布csdn博客吗
- pjsip apple下的编译
- id <UITableViewDataSource> dataSource
- 如何学好ios
- 直播应用 转入后台后,如何在手机界面显示顶部红色状态栏?
- uitableview中显示图片,如何将图片自动撑满一行?
- 在Objective-C中如何使用动态分配数组?
{
NSLog(@"AddressBook removeCard!!");
NSUInteger index = [addressArray indexOfObject: card];
if (index != NSNotFound) {
id temp = [addressArray objectAtIndex: index];
[addressArray removeObjectAtIndex: index];
[temp release];
}
}
这个我觉得靠谱一些。