Re: CF address book memory issues
Christiaan Hofman <[email protected]>
| Newsgroups | gmane.comp.macosx.devel |
|---|---|
| Message-ID | <[email protected]> |
I think you can be pretty sure this is a memory issue, rather a
synchronization issue. An app using the addressbook framework needs to
invoke ABSave before other apps will see any difference. It is not
guaranteed that Address Book does this whenever you modify a name in
it UI.
Christiaan
On Nov 1, 2009, at 17:28, Marcus Wood wrote:
> Hi there,
>
> I've been developing an application which needs to access the
> address book. The problem is I don't think Im properly releasing my
> CF objects and so I subsequently get old data
>
> There is an abstracted piece of code to demonstrate my problem
> below, but basically it prints the first name in a loop. The problem
> being that when you update the first name in address book it still
> prints out the old name, leading me to think that the old memory
> isn't being released
>
> Any help would be really appreciated, :)
>
> Thanks,
> Marcus
>
>
> PS: if you are trying the code out and need an address book UID if
> you export a vCard and open it with a text editor you can find it in
> there
>
>
> #include <CoreFoundation/CoreFoundation.h>
> #include <AddressBook/ABAddressBookC.h>
>
> #include <stdio.h>
> #include <unistd.h>
>
> int GetProperty(char *UIDStr, CFStringRef propertyConstant, char
> *retVal, uint retValSize)
> {
> CFStringRef UID;
> CFStringRef property;
> ABAddressBookRef addrBook;
> ABRecordRef record;
>
>
> UID = CFStringCreateWithCString(kCFAllocatorDefault, UIDStr,
> kCFStringEncodingMacRoman);
>
> addrBook = ABGetSharedAddressBook();
>
> record = ABCopyRecordForUniqueId(addrBook, UID);
>
> property = ABRecordCopyValue(record, propertyConstant);
>
> CFStringGetCString(property, retVal, retValSize,
> kCFStringEncodingMacRoman);
>
>
> CFRelease(property);
> CFRelease(record);
> CFRelease(UID);
>
> return (TRUE);
> }
>
>
> int main (int argc, const char * argv[])
> {
> char propertyStr[255];
>
> while(1)
> {
> GetProperty("14FA361C-17D4-48DE-808C-5DD10A9299CA:ABPerson",
> kABFirstNameProperty, propertyStr, sizeof(propertyStr));
> printf("propertyStr: %s\n", propertyStr);
> sleep(2);
> }
>
> return 0;
> }
> _______________________________________________
> MacOSX-dev mailing list
> [email protected]
> http://www.omnigroup.com/mailman/listinfo/macosx-dev