標籤:c style class blog code java
話不多說,直接舉例說明吧.情境類比:需要開發一個通訊錄相關功能,實現訪問以及添加等等.這時,需要使用的架構是Core Foundation.而此架構使用的是C語言,例如:CFArrayRef,CFStringRef等等.以下是讀取連絡人資訊的簡單代碼:
1 - (void)readMessage 2 { 3 ABAddressBookRef abR = ABAddressBookCreateWithOptions(NULL, NULL); 4 CFArrayRef arrayR = ABAddressBookCopyArrayOfAllPeople(abR); 5 CFIndex count = CFArrayGetCount(arrayR); 6 for (CFIndex i = 0; i < count; ++i) { 7 ABRecordRef recR = CFArrayGetValueAtIndex(arrayR, i); 8 CFStringRef strR = ABRecordCopyValue(recR, kABPersonLastNameProperty); 9 NSLog(@"%@",strR);10 CFRelease(strR);11 }12 CFRelease(arrayR);13 CFRelease(abR);14 15 }
在以上代碼中,不知道各位注意沒有,為了防止記憶體流失,我們必須不斷的使用CFRelease來釋放資源,即使在ARC下.再加上那糾結的函數,這些對於習慣了Foundation架構和ARC的猿猿們,是非常不習慣的.那麼怎樣做到,使用我們習慣的NSArray,NSString(Foundation架構)不再關心記憶體呢?如題,我們只需要使用橋接技術就可以解決:
1 - (void)readMessage2 2 { 3 ABAddressBookRef abR = ABAddressBookCreateWithOptions(NULL, NULL); 4 5 NSArray *array = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(abR); 6 int count = array.count; 7 for (int i = 0; i < count; ++i) { 8 ABRecordRef recR = (__bridge ABRecordRef)array[i]; 9 NSString *str = (__bridge NSString *)ABRecordCopyValue(recR, kABPersonLastNameProperty);10 NSLog(@"%@",str);11 }12 13 CFRelease(abR);14 }
對比起來,是不是又可以繼續愉快的寫代碼了呢?