詳解關於Cocoa編程模組間協作

來源:互聯網
上載者:User

Cocoa編程模組間協作是本文要介紹的內容,在cocoa編程中,我們經常會遇到delegate、Target-Action、notification等等這些方法,我覺得從某種角度看,可以將這些方法總結在一起,它們就是為不同模組間提供協作的方法,這種協作在這裡我把它理解為是“回調”,其實"回調"二字在這裡更多是借用,並沒有認真地去考究過這些正是一堆回呼函數,純粹是覺得挺像,感覺用來說明問題挺方便,所以就借用一下,應用程式層我們常見的"回調"就有以下幾類:

第一:當然是如雷貫耳的delegate,這個沒什麼好說的,教程和文檔說得夠權威仔細了,它主要在"父子"執行個體中會常被用到;

第二:這種方式比較常見,但卻未必會想到它其實也可以理解為是一種“回調”,這就是Target-Action模式;

第三:最任勞任怨的NSNotificationCenter,它以你最舒服的方式提供很令你滿意的服務,它有三個關鍵詞比較重要,observer、sender和name,observer就是notification的接受者,在"註冊method"中會碰到它,經常是self,我也建議是這樣,自己的notification就應該自己去註冊。

sender在設定"發送method"中postNotificationName:object:和postNotificationName:object:userInfo:)的object參數時會見到,這個參數非常重要,它直接影響對NSNotificationCenter 使用的品質,sender是什麼意思,就是notification的"簽名",當在註冊method中我們可以指定僅接受哪個sender的notification,那麼center就是靠"發送method"時的object這個參數所傳的"簽名"來決定怎麼發的,name比較簡單,相當於標題,observer可以而且必須指定接受哪些name的notification,不同name其含義自然不同,在關係比較遠的模組間,NSNotificationCenter很實用;

第四:KVO(Key-Value Observing),這個用得比較少,當B模組對A模組的屬性狀態感興趣時,可以使用這種方法,參考文檔:Key-Value Observing Quick Start;

第五:一個例子就明白了,它其實就是直接將一個對象的指標和方法作為參數傳給另一個對像,讓另一個對象來調用自己,就是這一句:

 
  1. UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);  
  2. #pragma mark -  
  3. #pragma mark UIImagePickerController delegate  
  4. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)Info {      
  5.       
  6.     UIImage *originalImage = [Info objectForKey:UIImagePickerControllerOriginalImage];  
  7.     if(nil != originalImage)  
  8.     {  
  9.          UIImageWriteToSavedPhotosAlbum(originalImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);  
  10.     }  
  11.         ...  
  12. }  
  13.  
  14. - (void) image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {  
  15.     ...  

小結:詳解關於Cocoa編程模組間協作的內容介紹完了,以上就是我的一點小小的總結,這些方法在模組間的協作可能會經常使用到的,希望對開始學習cocoa編程的朋友有所協助!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.