2012-07-10 37 views
1

我正在閱讀how to work with the iOS AddressBook上的文檔。雖然到目前爲止,我理解它的一般機制,但我無法理解特別是如何構建此框架背後的基本原理。我剛剛完成我的第二個應用程序,所以當我看到一些我沒有經歷過的iOS框架時。這個框架與我目前看到的完全不同,完全令我困惑。iOS 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]); 
+0

不知道。但其他人也認爲是相同的,並編寫了Objective-C包裝器。請參閱:http://stackoverflow.com/q/3338542/558933 – 2012-07-10 18:40:10

回答

2

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

我們都不知道Apple爲什麼選擇編寫C API而不是專門用於AddressBook的Objective-C API,但人們可能會猜測他們需要從低層訪問地址簿中的數據。例如,處理傳入電話呼叫的軟件組件可能相當低級(至少與第三方應用程序相比),可能需要C API。

相關問題