В чем смысл дизайна фреймворка iOS AddressBook?

Я читаю документы о том, как работать с адресной книгой iOS. Несмотря на то, что я до сих пор понимаю общую механику этого процесса, у меня возникают проблемы с пониманием обоснования того, как именно создается эта структура. Я только что закончил свое второе приложение, так что, хотя я видел пару платформ iOS, я не настолько опытен. Чем эта структура отличается от того, что я видел до сих пор, меня полностью озадачивает.

Я уверен, что у инженеров Apple были свои причины поступать так, как они это делали, но я спрашиваю, потому что я думаю, что очень важно понять или, по крайней мере, попытаться понять мыслительный процесс, стоящий за этим.

Это документированный способ получить строковое значение из записи AddressBook:

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]);

1 ответ

Решение

Некоторые фреймворки имеют Objective-C API; другие имеют C API. Например, Core Foundation - это все C, а Cocoa и Cocoa Touch - Objective-C.

Никто из нас не знает наверняка, почему Apple решила написать API C вместо Objective-C API для AddressBook, но можно предположить, что у них была потребность в доступе к данным в адресной книге с более низких уровней. Например, программный компонент, который обрабатывает входящие телефонные звонки, вероятно, довольно низкого уровня (по крайней мере, по сравнению со сторонними приложениями) и может потребовать C API.

Другие вопросы по тегам