2010-11-22 16 views
0

Ich lese Datensätze aus dem AddressBook mit der Apple bereitgestellten API.Speicherverwaltung bei Verwendung von CFStrings von de AddressBook

Ich bekomme immer noch meinen Kopf um Speicherverwaltung und so sind CFStrings mich im Moment verwirrend. Diese

ist, wie erhalte ich die Eigenschaften:

//Get Basic properties 
NSString* firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
NSString* lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
NSNumber* record = [NSNumber numberWithInt:ABRecordGetRecordID(person)]; 

//Build Full Name 
NSString* fullName=[self fullNameWith:firstName and:lastName]; 

//Get Phone number and Label 
ABMultiValueRef phone = ABRecordCopyValue(person, property); 
    //Turn identifier into index 
CFIndex index = ABMultiValueGetIndexForIdentifier(phone, identifier); 
    //Get the value and the label using the index 
NSString *value =(NSString *)ABMultiValueCopyValueAtIndex(phone, index); 
CFStringRef label = ABMultiValueCopyLabelAtIndex(phone, index); 
    //Get the localized value of hte label 
NSString * localizedLabel = (NSString *)ABAddressBookCopyLocalizedLabel(label); 

Danach habe ich die Werte verwenden, die einzige Sache ist, dass ich weiß nicht, ob ich sie lösen soll oder nicht.

Ich würde eine Antwort schätzen, die mir auch geholfen hat, Speicherverwaltung besser zu verstehen oder die mich in die richtige Richtung weist.

Vielen Dank!

Antwort

5

Die Faustregel für Core Foundation ist, dass alle Funktionen, die Copy oder Create in ihrem Namen enthalten, ein Objekt zurückgeben, das Sie für die Freigabe verantwortlich sind. Apples Memory Management Guide for Core Foundation erklärt das etwas genauer.

+0

Vielen Dank! Nur um klarzustellen, wenn Sie die Umwandlung von CFString zu NSString durchführen, tun Sie [string release] oder CFRelease (string)? – Zebs

+0

Tatsächlich werden sie sich in diesem Fall genau so verhalten, weil CFString und NSString "gebührenfrei überbrückt" sind. Ich würde verwenden, was am klarsten und am leichtesten zu verstehen ist für Ihren Code und wer auch immer es lesen mag. –