Iphone 记忆体泄漏
我通过以下方法获得内存泄漏:Iphone 记忆体泄漏,iphone,ios,abaddressbook,Iphone,Ios,Abaddressbook,我通过以下方法获得内存泄漏: - (void) SyncContactData { ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); for( i
- (void) SyncContactData
{
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
for( int i = 0 ; i < nPeople ; i++ )
{
//dicContact = [[NSMutableDictionary alloc] init];
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i );
NSString *str = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
NSString *strSub = ABRecordCopyValue(ref, kABPersonFirstNameProperty);
int ii = [[NSString stringWithFormat:@"%@",strSub] length];
if(str != nil || ii == 0)
[arrNames addObject:strSub];
else
[arrNames addObject:@""];
CFTypeRef multival = ABRecordCopyValue(ref, kABPersonPhoneProperty);
NSArray *arrayPh = (NSArray *)ABMultiValueCopyArrayOfAllValues(multival);
if([arrayPh count] > 0)
[arrPhone addObject:[arrayPh objectAtIndex:0]];
else
[arrPhone addObject:@""];
CFRelease(multival);
}
CFRelease(addressBook);
CFRelease(allPeople);
}
-(无效)同步联系人数据
{
ABAddressBookRef addressBook=ABAddressBookCreate();
CFArrayRef allPeople=abAddressBookCopyArrayFallPeople(addressBook);
CFIndex nppeople=ABAddressBookGetPersonCount(地址簿);
for(int i=0;i0)
[arrPhone addObject:[arrayPh objectAtIndex:0]];
其他的
[arrPhone addObject:@”“;
cfl释放(多变量);
}
CFRelease(通讯录);
CFRelease(所有人);
}
这里有漏洞:
NSString*str=ABRecordCopyValue(ref,kabbersonfirstnameproperty)代码>
NSString*strSub=ABRecordCopyValue(ref,kabbersonfirstnameproperty)代码>
NSArray*arrayPh=(NSArray*)ab多值CopyArrayFallValues(多值)代码>
您需要释放处理完最初复制的对象:
[str release];
[strSub release];
[arrayPh release];
如果启用了ARC,您可能需要改用
CFRelease
(并适当地强制转换)。那么,为什么不释放它们呢
CFRelease(str);
CFRelease(strSub);
CFRelease(arrayPh);