成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Objective-c閉包簡單應用

移動開發 iOS
本文介紹的是詳解Objective-c閉包簡單應用,這里的閉包自然是計算機語言中的閉包,詞法閉包(Lexical Closure)的簡稱,來看內容。

詳解Objective-c閉包簡單應用是本文要介紹的內容,主要介紹的是閉包的應用,不多說,文章中介紹的已經很詳細,我們先來看內容詳解。

概念介紹

這里的閉包自然是計算機語言中的閉包,詞法閉包(Lexical Closure)的簡稱,主要表現在函數可以引用到自由變量,并且可以脫離變量的創建環境,再復雜的定義也不需要多說明了,可以理解為面向對象里面的成員函數可以調用其成員變量,然其概念卻比面向對象的概念流行早的多,約六十年代在Scheme里就實現了。函數式編程語言里這是非常常見的概念,而非函數式的語言中js里也有很多閉包出現的身影。

Objective-c的閉包

準確地說在Objective-c里不叫閉包(Closure)而叫Block,但概念還是大同小異的。Mac平臺上需要LLVM的支持,總之較新的Xcode都是支持這個特性的。 自由變量在使用是需要用__block關鍵字定義,而閉包函數的形式與函數指針非常接近,簡單地說把函數指針的*換成^就可以了

Objective代碼 

  1. typedef int (^IntBlock)();      
  2.       
  3. IntBlock downCounter(int start)      
  4. {     
  5.     __block int i = start;     
  6.      return Block_copy( ^int(){return i--; }); }     
  7.     IntBlock f = downCounter(5);     
  8.     printf("%d", f());     
  9.     printf("%d", f());     
  10.     printf("%d", f());     
  11.     Block_release(f);     
  12. }    
  13.  
  14. typedef int (^IntBlock)();   
  15.    
  16. IntBlock downCounter(int start)   
  17. {  
  18.     __block int i = start;  
  19.      return Block_copy( ^int(){return i--; }); }  
  20.     IntBlock f = downCounter(5);  
  21.     printf("%d", f());  
  22.     printf("%d", f());  
  23.     printf("%d", f());  
  24.     Block_release(f);  

是這么簡單。

閉包應用

單純就語法而言,閉包并沒什么好談的,但它的應用已經越來越廣,特別是iPhone新的GCD特性,廣泛使用了閉包,如果不知到閉包怎么寫,就會陷入明明系統提供了接口卻無法調用的尷尬境地。 可能會覺得,出了系統接口必須要用block而不得不使用的情況外,其他時候直接用函數指針不就得了,實際上除非你真的用到了自由變量,其他時候 block和函數指針確實沒什么區別,但block也有自己的獨到之處。

首先它不需要事先定義函數,如果是函數指針那么必須要把指針指向一個函數,而函數必須要定義,閉包則不然,直接對代碼塊就可以調用 其次就算已經事先定義好了函數,只要對函數名取一下^即可直接放到閉包的地方使用,可以理解為向下兼容吧。 比如iPhone的動畫效果,你必須先開始動畫,然后寫你想要動畫的操作,***提交,而開始動畫和提交之間的鴻溝沒法很好的協調,相當于這樣

Objective-c代碼  

  1. [self beginAnimation];     
  2. [self animationAction];     
  3. [self endAnimation];    
  4.  
  5. [self beginAnimation];  
  6. [self animationAction];  
  7. [self endAnimation];  

而且每個動畫都必需事先其專門的animationAction而iPhone的動畫效果實在是個很平常的操作,這就多出了無數冗余函數,即使它只是一行hidden之類,而且也不方便擴展,閉包就很適合這種需求

Objective-c代碼 

  1. + (void)animation:(NSTimeInterval)duration withEvent:(animationEvent)event     
  2. {      
  3.     [UIView beginAnimations:@"animationID" context:nil];     
  4.     [UIView setAnimationDuration:duration];     
  5.     [UIView setAnimationCurve:UIViewAnimationCurveLinear];     
  6.     [UIView setAnimationRepeatAutoreverses:NO];     
  7.     event();     
  8.     [UIView commitAnimations];     
  9. }     
  10.       
  11. [Tools animation:0.8 withAnimationCurve:UIViewAnimationCurveEaseInOut withEvent:^{[     
  12.     UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:centerView_ cache:YES];     
  13.         // 移除功能列表     
  14.     [menuView_ removeFromSuperview];     
  15.         // 增加二次拔號鍵盤     
  16.     [centerView_ addSubview:phonePad_ ];     
  17.     }     
  18. ];    
  19.  
  20. + (void)animation:(NSTimeInterval)duration withEvent:(animationEvent)event  
  21. {   
  22.     [UIView beginAnimations:@"animationID" context:nil];  
  23.     [UIView setAnimationDuration:duration];  
  24.     [UIView setAnimationCurve:UIViewAnimationCurveLinear];  
  25.     [UIView setAnimationRepeatAutoreverses:NO];  
  26.     event();  
  27.     [UIView commitAnimations];  
  28. }  
  29.    
  30. [Tools animation:0.8 withAnimationCurve:UIViewAnimationCurveEaseInOut withEvent:^{[  
  31.     UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:centerView_ cache:YES];  
  32.         // 移除功能列表  
  33.     [menuView_ removeFromSuperview];  
  34.         // 增加二次拔號鍵盤  
  35.     [centerView_ addSubview:phonePad_ ];  
  36.     }  
  37. ];  

當然了,閉包最重要的概念還是自由變量什么的,可惜我一致沒法理解,這里僅僅是拿它當快捷的函數包裹來使用了。

小結:詳解Objective-c閉包簡單應用的內容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-29 16:16:30

Objective-c block

2014-06-25 14:02:59

Objective-CKVO

2011-08-17 10:58:59

Objective-C構造函數

2011-07-19 17:24:31

Objective-C 對象

2015-10-08 10:01:10

Objective-CLayout

2011-07-18 16:36:51

Objective-C XCode

2014-04-01 10:50:42

iOS開發runtimeObjective-C

2011-08-17 10:29:39

Objective-C預處理

2011-08-04 13:38:01

Objective-C C++

2011-08-01 17:11:43

Objective-C 函數

2011-08-15 14:32:42

Objective-C委托協議

2014-04-28 09:56:56

Objective-CiOS命名空間

2011-08-17 11:05:22

Objective-C方法

2011-07-08 18:44:09

Objective-C Self Super

2011-08-16 13:43:40

Objective-C文件cocoa

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用鍵

2011-07-29 15:47:21

iPhone開發 Objective- C

2011-08-10 18:07:29

Objective-C反射

2011-08-04 10:04:17

Objective-C 分類 協議

2011-08-04 18:14:42

Objective-C 消息
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩a在线| 成人做爰9片免费看网站 | 国产精品一区在线观看 | 久久夜色精品国产 | 91久久久久久久久久久 | 免费黄视频网站 | 亚洲精品视频导航 | 九九热这里只有精品在线观看 | 欧美午夜激情在线 | 日本午夜精品 | 91欧美 | 97精品国产 | 成年免费大片黄在线观看一级 | 97视频免费 | 91av亚洲| 日韩精品一区在线观看 | 99久久久久国产精品免费 | 中文字幕亚洲专区 | 亚洲国产成人精品女人久久久 | 欧美视频二区 | 黄色大全免费看 | 日韩日b视频| 精品久久久网站 | 特级黄一级播放 | 99精品一区二区三区 | 国产日韩欧美一区 | 国产成人在线视频播放 | 欧美美女爱爱 | 亚洲欧洲精品一区 | h视频免费观看 | 视频一区二区中文字幕日韩 | 欧美综合在线视频 | 小早川怜子xxxxaⅴ在线 | 久久国产欧美日韩精品 | 91佛爷在线观看 | 欧美日韩中文字幕在线 | 欧美在线a | 91在线免费视频 | 亚洲电影一区二区三区 | 亚洲精品一 | 影音先锋中文字幕在线观看 |