1

iOS AddressBook の操作方法に関するドキュメントを読んでいます。これまでのところ、その一般的なメカニズムは理解していますが、特にこのフレームワークがどのように構築されているかの背後にある理論的根拠を理解するのに苦労しています. 私は 2 つ目のアプリを完成させたばかりなので、いくつかの 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]);
4

1 に答える 1

2

一部のフレームワークには Objective-C API があります。他のものには C API があります。たとえば、Core Foundation はすべて C ですが、Cocoa と Cocoa Touch は Objective-C です。

Apple が特に AddressBook 用に Objective-C API ではなく C API を作成することを選択した理由を明確に知っている人はいませんが、下位レベルからアドレス帳のデータにアクセスする必要があったことは推測できます。たとえば、電話の着信を処理するソフトウェア コンポーネントは、(少なくともサード パーティのアプリと比較すると) かなり低レベルであり、C API を必要とする場合があります。

于 2012-07-10T18:42:01.963 に答える