- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有清除设备中地址簿的方法。方法如下。
-(void) clearAdressBook
{
ABAddressBookRef addrBook=ABAddressBookCreate();
CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addrBook);
if(groups)
{
CFIndex numGroups = CFArrayGetCount(groups);
for(CFIndex idx=0; idx<numGroups; ++idx)
{
ABRecordRef groupItem = CFArrayGetValueAtIndex(groups, idx);
CFArrayRef people=
ABGroupCopyArrayOfAllMembers(groupItem);
if(people)
{
CFIndex peopleCount=CFArrayGetCount(people);
for(CFIndex ind=0;ind<peopleCount;++ind)
{
ABRecordRef person=CFArrayGetValueAtIndex(people, ind);
ABAddressBookRemoveRecord(addrBook, person, nil);
ABAddressBookSave(addrBook, NULL);
CFRelease(person);
}
CFRelease(people);//CRASH
}
}
}
CFRelease(groups);
}
当我发布 CFArrayRef 应用程序崩溃时,这里出了什么问题?据我所知,我必须释放所有从名称包含复制或创建权限的 CF 方法返回的对象?
最佳答案
您可能在这里过度释放了“人”对象。 Infact person 是从一个数组中检索出来的,它遵循“获取规则”,所以你不是它的所有者,你不能释放它(或者:你可以先保留它,如果你不确定对象,然后再释放它生命周期)。在 for 循环结束时,当您释放“people”时,数组会尝试释放其已过度释放的内部对象(“people”),这会导致崩溃。
因此,请尝试删除 CFRelease(people) 语句,或者,为了更加安全,在从数组中获取 person 后立即添加一个 CFRetain(people)(但不要删除 CFRelease(people) 指令)。
关于ios - CFRelease(CFArrayRef) 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482369/
我正在尝试使用内置方法将一个 iPhone 联系人转换为 vCard。文档说要使用: ABPersonCreateVCardRepresentationWithPeople(CFArrayRef pe
我有清除设备中地址簿的方法。方法如下。 -(void) clearAdressBook { ABAddressBookRef addrBook=ABAddressBookCreate();
我通过桥接头在我的 Swift 项目中使用 Objective-C 类。方法签名看起来像这样: - (CFArrayRef)someMethod:(someType)someParameter; 我首
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to make an CFArrayRef to an NSMutableArray 我知道有很多关
这是我创建 CFArrayRef 的代码。我想知道如何将它变成 NSMutableArray。我的 TableViewController 需要它。或者有其他方法可以在 TableViewContro
我使用手动引用计数、ARC 和 CF 对象已经有一段时间了,但是今天在使用 AddressBook API 时,我意识到我不明白一件事(我也无法在文档中找到解释) . 这是我的用例:我正在从 ABRe
这很好: CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWind
我是跨平台编程的新手。我在这里遇到一个问题,但由于在线帮助非常有限(或者可能是我不知道在哪里搜索),我找不到解决方案。 问题是:我想将 CFArrayRef 转换为 C++/C 中可用的格式我有一个
我有一个 ARC 项目,正在尝试绘制垂直线性渐变。下面的代码适用于模拟器,但在设备上测试时会抛出内存/EXC_BAD_ACCESS 错误。该应用程序因以下两行代码而崩溃: NSArray *color
假设我有一个包含 CFStringRefs 的 CFArrayRef,我使用 CFBridgingRelease() 将它桥接到 NSArray。我现在可以将数组的内容视为常规 NSString 实例
我是一名优秀的程序员,十分优秀!