多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 淺析ios開發中Block塊語法的妙用

淺析ios開發中Block塊語法的妙用

來源:程序員人生   發布時間:2014-12-11 08:37:34 閱讀次數:2971次

      事實上,任何1個利用的開發都離不開多線程。而“塊”block與GCD就是蘋果OC語言中多線程的核心。
    
1.塊的內部結構
     在oc中,塊語法以閉包的情勢存在,每個Objective-C對象都占據著某個內存區域。塊本身也是1個對象,在寄存塊的對象內存區域中,首個變量是指向Class的指針,該指針叫做isa。其余內存里含有塊對象正常運轉所需的各種信息。
    以下是塊語法的內部結構變量。
    1.void*                                   isa(指向class的對象指針)
    2.int                                       flags
    3.int                                       reserved
    4.void(*)(void*,……)  invoke(函數指針)
    5.struct*                                 descriptor(結構體描寫)
  
    根據上述塊語法的內存結構可知,其中最重要的就是invoke變量,這是1個函數指針,指向的就是塊的實現代碼。

2.塊在系統api回調中的利用
   在iOS的原生api中,有很多的地方都用到了塊語法。其中最多見的主要是兩個地方,1個就是數組和字典的塊枚舉,這類枚舉方式是每個NSArry和NSDictionary都自帶的,其效力和便利性遠遠高于傳統的for循環。
  

[self.p_tableArrenumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop) {

                    <#code#>

                }]


另外一個常見的地方就是頁面跳轉present以后的完成回調,

[self presentViewController:<(UIViewController *)> animated:<(BOOL)> completion:<^(void)completion>]


3.塊語法在UIAlertView中的集中代碼

 UIAlertView是1個彈窗控件,有1些按鈕,最多見的就是確認和取消,UIAlertView有1個代理處理這些按鈕,當用戶點擊后,該代理可以捕獲按鈕的下標,然后用戶根據下標Index寫1些邏輯代碼。

  

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex


  快語法的第1個妙用就是可以直接在創建這個UIAlertView控件的時候就已寫好邏輯代碼,完全不用寫在以上回調中。

  以下是具體實現。

  第1步,申明1個全部的Block對象,根據UIAlertView的回調代理可知,該代理主要參數是1個NSInteger類型的參數,那末我們申明的Block對象可以根據代理的實際情況來創建。

@property(nonatomic,copy)void(^p_alertBlock)(NSInteger);


  第2部,在創建這個UIAltView的地方實現這個全部的Block對象。

  if(!self.p_alertBlock)

        {

           self.p_alertBlock = ^(NSInteger buttonIndex)

            {


               AccountViewController *acc = accc;

               switch (buttonIndex) {

                   case 0:

                       break;

                        

                   case 1:

                        

                       if([acc.p_fmdbdeleteObjc:list])

                        {

                            [acc.p_tableArrremoveObjectAtIndex:acc.p_didSelect];

                            [acc.p_tablereloadData];

                        }

                       break;

                }

            };

        }

        UIAlertView *alt = [[UIAlertViewalloc] initWithTitle:NSLocalizedString(@"tip",nil)message:NSLocalizedString(@"sureDelet",nil) delegate:selfcancelButtonTitle:NSLocalizedString(@"cancel",nil) otherButtonTitles:NSLocalizedString(@"ok",nil),nil];

        [altshow];

   這是1個刪除數據庫操作的彈窗,當用戶點擊確認的時候刪除數據庫的對象,點擊取消不做任何處理。
   第3步,在UIAlertView的代理中運行快。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

   self.p_alertBlock(buttonIndex);

}


  這個用法有1個好處就是可以在UIAlertView還未創建之前就已肯定了它按鈕的處理,集中代碼,看起來更加的方便和直觀。

  以上只是1個事例,在系統很多控件中都可以這樣實現,諸如UIActionSheet等。

  


  3.塊語法替換Delegate

 提起ios的消息通知,就少不了代理Delegate。代理雖然很方便,可是實現的進程比較繁瑣。如果使用塊語法的話,我們可以提早把回調函數的代碼實現封裝到Block中作為參數傳遞給數據層,這模樣實際上在代理回調中

if(self.delegate && [self.delegaterespondsToSelector:@selector(setAddressSuccess:)])

        {

            [self.delegatesetAddressSuccess:self.accountList.remark];

        }

這句話就被

Block(self.accountList.remark);所取代。

  是否是更加的便捷了呢?關鍵是你根本就不用聲明朝理,實現,設置代理,保護協議等等復雜的進程。

  

  代理還有1個限制就是必須要對象化,假設1個工具類是1個類的實例方法,你想在某些操作以后把數據回調給C層,這個時候代理就沒法實行了,但是Block只不是是1個對象而已,就像NSString1樣,可以幫助你實現。


  以上只是塊語法在系統控件API回調中的妙用和兩個類之間代理的妙用,更多的功能還有待在實際開發中逐漸發掘發現。

  

  仁者見仁,智者見智,塊語法究竟強大到何種地步,等你用多了就知道了。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产成人久久久精品一区二区三区 | 国产三级第一页 | 嫩草影院精品视频在线观看 | 嫩草影院在线观看精品视频 | 亚洲三级图片 | 亚洲精品一区二区三区国产 | 欧美性一级 | 欧美高清视频手机在在线 | 欧美日韩中文国产一区二区三区 | 欧美一级精品 | 动漫一级毛片 | 福利在线免费 | 欧美综合伊人久久 | 国产福利视频一区 | 狠狠色噜噜狠狠狠狠五月婷 | 伊人五月| 99热这里有精品 | 影院福利| 波多野结衣不卡 | 伊人影院视频 | 亚洲精品一二三 | www.羞羞| 国产第一区二区三区在线观看 | 伊人五月天综合 | 国产亚洲人成a在线v网站 | 欧美综合第一页 | 免费伦理片在线观看 | 国产亚洲欧美成人久久片 | xx在线| 国产二区视频在线观看 | 久久xx| 毛片大全网站 | 成人在线观看不卡 | 日本久久久久一级毛片 | 一级秋霞理论 | 日本一区二区三区不卡在线看 | 亚洲视频一区在线观看 | 天天做天天爱天天爽综合网 | 欧美成人一区二区三区在线视频 | 亚洲免费一区二区 | 国内自拍偷拍 |