使用强制转换代替CFStringRef获取联系信息

时间:2012-06-12 08:56:31

标签: iphone objective-c casting

我对使用“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是否常规?使用直接铸造是否正确?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

  

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

两者都是一样的。