1

我对使用“CFStringRef”有疑问。我见过几个管理 iPhone 联系人的示例,其中大多数都使用:

...
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
CFStringRef emailRef = ABMultiValueCopyValueAtIndex(emails, 0);
...
NSString *email = (NSString *)emailRef;

我不知道为什么使用 CFStringRef 而不是使用强制转换:

...
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
NSString *email = (NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
...

使用 CFStringRef 是否常规?使用直接铸造是否正确?

4

2 回答 2

0

没有区别,第一个例子只是使用了一个额外的临时变量。执行直接转换是完全可以的,尽管您应该注意内存管理方面。ABMultiValueCopyValueAtIndex尽管文档不清楚,但听起来像是返回了一个保留的对象。

于 2012-06-12T08:58:08.973 回答
0

CFString与 Cocoa Foundation 对应的 NSString 是“免费桥接”。这意味着 Core Foundation 类型在函数或方法调用中可以与桥接的 Foundation 对象互换。因此,在看到 NSString * 参数的方法中,可以传入 CFStringRef,在看到 CFStringRef 参数的函数中,可以传入 NSString 实例。这也适用于 NSString 的具体子类。

两者都是一样的。

于 2012-06-12T08:58:54.557 回答