1

我正在阅读有关如何使用 iOS AddressBook的文档。虽然到目前为止我了解它的一般机制,但我很难理解这个框架是如何构建的背后的基本原理。我刚刚完成了我的第二个应用程序,所以虽然我看到了几个 iOS 框架,但我并没有那么有经验。这个框架与我目前所看到的有何不同完全让我感到困惑。

我确信 Apple 的工程师有他们这样做的理由,但我之所以这么问是因为我认为理解或至少尝试理解其背后的思维过程非常有价值。

这是从地址簿记录中获取字符串值的记录方法:

NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);

这是获取联系人价值的记录方式,在本例中为电话号码(如果有):

ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);

最后,您可以像这样计算电话号码:

ABMultiValueGetCount(phoneNumbers)

我的问题是...

当与其他框架一起工作时,所有这些小功能(如ABRecordCopyValue(),等)背后的基本原理是完全不同的。ABMultiValueGetCount()我的意思是,为什么使用 AddressBook 看起来不像这样?

NSAddressBookContact *person = [[NSAddressBookContact alloc] initWithRecordReference:myRecord];
NSString *name = person.name;
NSLog(@"Phone number count: %i", [person.phoneNumbers count]);
4

1 回答 1

2

一些框架有一个 Objective-C API;其他人有一个 C API。例如,Core Foundation 都是 C,而 Cocoa 和 Cocoa Touch 都是 Objective-C。

None of us knows for certain why Apple chose to write a C API instead of an Objective-C API for AddressBook specifically, but one might guess that they had a need to access data in the address book from lower levels. For example, the software component that handles incoming phone calls is probably pretty low-level (at least compared to third party apps) and might require a C API.

于 2012-07-10T18:42:01.963 回答