首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发布CFString

发布CFString
EN

Stack Overflow用户
提问于 2012-06-19 22:00:37
回答 3查看 2.5K关注 0票数 2

我使用下面的代码来获取ABPerson的姓氏

代码语言:javascript
复制
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
CFRelease(lastNameRef);

当last name的值不等于NULL时,它工作得很好,但当this值为NULL时,应用程序会在第三行崩溃,因为我尝试重新搜索NULL

问题是在这种情况下释放CFString而不会导致应用程序崩溃的最佳方法

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-19 22:07:45

只需使用if检查是否为空即可。

代码语言:javascript
复制
if (lastNameRef != NULL)
    CFRelease(lastNameRef);
票数 6
EN

Stack Overflow用户

发布于 2012-06-19 22:13:18

CFRelease是旧的C风格代码。应该在调用CFRelease之前检查是否为NULL,因为在调用CFRelease之后也应该将lastNameRef设置为NULL。

if (lastNameRef != NULL) { CFRelease(lastNameRef); lastNameRef = NULL; }

票数 2
EN

Stack Overflow用户

发布于 2012-06-19 22:18:56

CFRelease需要一个非空指针。您可以使用if语句检查这一点,但更简单的方法是发布或自动发布friendLastName

代码语言:javascript
复制
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
// use friendLastName
[friendLastName release];

代码语言:javascript
复制
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
NSString *friendLastName = (NSString*)lastNameRef;
[friendLastName autorelease];
// use friendLastName

由于您似乎不使用lastNameRef,因此您也可以内联该变量:

代码语言:javascript
复制
NSString *friendLastName = (NSString*)ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
// use friendLastName
[friendLastName release];

代码语言:javascript
复制
NSString *friendLastName = (NSString*)ABRecordCopyValue((ABRecordRef)personRecordRef, kABPersonLastNameProperty);
[friendLastName autorelease];
// use friendLastName
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11102629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档