iOS兩個架構之間的類型轉換--"橋接"技術

來源:互聯網
上載者:User

標籤: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 }

  對比起來,是不是又可以繼續愉快的寫代碼了呢?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.