我使用下面的代码来获取ABPerson的姓氏
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
CFRelease(lastNameRef);当last name的值不等于NULL时,它工作得很好,但当this值为NULL时,应用程序会在第三行崩溃,因为我尝试重新搜索NULL
问题是在这种情况下释放CFString而不会导致应用程序崩溃的最佳方法
发布于 2012-06-19 22:07:45
只需使用if检查是否为空即可。
if (lastNameRef != NULL)
CFRelease(lastNameRef);发布于 2012-06-19 22:13:18
CFRelease是旧的C风格代码。应该在调用CFRelease之前检查是否为NULL,因为在调用CFRelease之后也应该将lastNameRef设置为NULL。
if (lastNameRef != NULL) { CFRelease(lastNameRef); lastNameRef = NULL; }
发布于 2012-06-19 22:18:56
CFRelease需要一个非空指针。您可以使用if语句检查这一点,但更简单的方法是发布或自动发布friendLastName:
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
// use friendLastName
[friendLastName release];或
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
[friendLastName autorelease];
// use friendLastName由于您似乎不使用lastNameRef,因此您也可以内联该变量:
NSString *friendLastName = (NSString*)ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
// use friendLastName
[friendLastName release];或
NSString *friendLastName = (NSString*)ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
[friendLastName autorelease];
// use friendLastNamehttps://stackoverflow.com/questions/11102629
复制相似问题