我对使用“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是否常规?使用直接铸造是否正确?
答案 0 :(得分:0)
没有区别,第一个例子只使用了一个额外的临时变量。虽然您应该注意内存管理方面,但执行直接转换是完全可以的。听起来ABMultiValueCopyValueAtIndex
会返回一个保留的对象,尽管文档不清楚。
答案 1 :(得分:0)
CFString与其可可基金会对应的“免费桥接”, NSString的。这意味着Core Foundation类型是可互换的 在函数或方法中使用桥接的Foundation对象调用。 因此,在您看到NSString *参数的方法中,您可以 传入一个CFStringRef,并在一个函数中,你看到一个CFStringRef 参数,您可以传入NSString实例。这也适用于 NSString的具体子类。
两者都是一样的。