<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦>知識大全>知識百科>百科知識>

        ios中什么是block

        時間: 歐東艷656 分享

          IOS(Internetworking Operating System-Cisco,縮寫IOS),CISCO網絡配置系統。IOS是一個為網際互連優化的復雜的操作系統——類似一個局域操作系統(NOS)、如Novell的NetWare,為LANs而進行優化。IOS為長時間經濟有效地維護一個互聯網絡提供一下統一的規則。簡而言之,它是一個與硬件分離的軟件體系結構,隨網絡技術的不斷發展,可動態地升 級以適應不斷變化的技術(硬件和軟件)。IOS可以被視作一個網際互連中樞:一個高度智能的管理員,負責管理的控制復雜的分布式網絡資源的功能。

          Block可以幫助我們組織獨立的代碼段,并提高復用性和可讀性。iOS4在UIKit中引入了該特征。超過100個的Apple API都使用了Block,所以這是一個我們必須開始熟悉的知識。

          Block是什么樣的?

          你可以使用^操作符來聲明一個Block變量,它表示一個Block的開始。

          int num1 = 7;

          int(^aBlock)(int) = ^)int num2) {

          return num1+nunm2;

          };

          在如上代碼中我們將Block聲明為一個變量,所以可以將它當做一個函數中使用:

          NSLog(@"%d", aBlock(49)); //adds 49 to 7 which gives us 56.

          我們剛看過了將block當做變量的情況,但通常情況下我們會以內聯的方式使用Block,比如在一個變量中。API要么會使用Block在一個對象集合上執行某種操作,要么將其作為一個操作完成后的回調。

          NSComperator compareStringsBlock = ^(id stringA, id stringB) {

          NSRange rangeS = NSMakeRange (0, [stringA length]);

          return (stringA compare:stringB options:comparisonOptions range:rangeS locale:currentLocale];

          };

          NSArray *compareSortArray = [arrayOfStringDays sortArrayUsingComparator: compareStringsBlock]);

          Block具有將臨時函數體創建為表達式的優勢。Apple文檔中指出:

          Block是符合如下要求的匿名內聯的代碼集:

          和函數一樣具有一個指定類型的參數列表

          有一個可以推導或聲明的返回值類型

          可以從它被定義的詞義范圍中捕捉狀態

          可以在需要的時候改變詞義范圍的狀態

          可以和相同的詞義范圍中定義的其他的Block共享更改的可能。

          可以在詞義范圍(堆棧幀)被銷毀后繼續共享和修改該詞義范圍(堆棧幀)的狀態。

          Block是一個自包含的小代碼段,封裝了用于遍歷(線性遍歷)或者回調,可以并發執行的任務單元。

          聲明和使用Block

          Apple文檔中介紹了如何將一個Block聲明為變量,并將其作為一個函數使用:

          int (^oneFrom)(int) = ^(int anInt) {

          return anInt - 1;

          };

          // 我們創建了一個內聯塊^(int anInt)... ,其函數體和結果被傳到了另外一個名為OneFrom的Block。

          printf("1 from 10 is %d", oneFrom(10));

          // 打印出: "1 from 10 is 9"

          // 這個block函數(distanceTraveled)傳入3個float型參數,返回float值。

          float (^distanceTraveled) (float, float, float) =

          ^(float startingSpeed, float acceleration, float time) {

          float distance = (startingSpeed * time) + (0.5 * acceleration * time * time);

          return distance;

          };

          你也可以傳入一個Block作為一個參數,而不要以如上的方式聲明它們,這樣就可以在需要將block作為參數的時候以內聯代碼的方式簡單地實現。

          NSArray *anArray = [NSArray arrayWithObjects: @"cat", @"dog",nil];

          sortFunction(anArray, ^(string *a string *b){

          if ( a == @"cat") return TRUE; });

          這樣我們就看到一個內聯的block代碼段占據了最后一個參數(必須是參數列表的最后一個參數)的位置。Cocoa提供了很多使用Block的方法,這樣你就可以傳入Block作為方法的參數:

          NSArray *array = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];

          NSSet *filterSet = [NSSet setWithObjects: @"A", @"Z", @"Q", nil];

          BOOL (^test)(id obj, NSUInteger idx, BOOL *stop); //Block declaration returns BOOL, params inc. id and BOOL

          //body of block gets the block literal ^(id obj, NSUInteger idx, Bool *stop)... and the body logic

          test = ^ (id obj, NSUInteger idx, BOOL *stop) {

          if (idx < 5) {

          if ([filterSet containsObject: obj]) {

          return YES;

          }

          }

          return NO;

          };

          Apple提供的另外一個例子是:

          __block BOOL found = NO;

          NSSet *aSet = [NSSet setWithObjects: @"Alpha", @"Beta", @"Gamma", @"X", nil];

          NSString *string = @"gamma";

          //we provide below a way of how to enumerate, using our own compare logic

          [aSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop) {

          if ([obj localizedCaseInsensitiveCompare:string] == NSOrderedSame) {

          *stop = YES;

          found = YES;

          }

          }];

          As you can see, it takes a little while to have it sink in but once you get it, it's quite simple. I suggest looking at Apple's documentation, as well as looking at the referenced APIs to see how they are used. Practice makes perfect.

        245511 主站蜘蛛池模板: 国产视频不卡一区二区三区| 日本道之久夂综合久久爱| 亚洲日本中文字幕天天更新| 国产亚洲精品日韩av在| 日韩一区二区三区在线视频| 99久久国产成人免费网站| 精品亚洲精品日韩精品| 国产一区二区三区日韩精品| 人人妻人人添人人爽日韩欧美 | 九九久久人妻精品一区色| 中文有码字幕日本第一页| 麻豆成人精品国产免费| 国产精品一码二码三码| 无码人妻斩一区二区三区| 九九热视频在线免费观看| 久久se精品一区二区三区| 55大东北熟女啪啪嗷嗷叫| 国产午夜福利精品视频| 国产色婷婷免费视频| 久久九九亚洲国产成人| 中文字幕在线视频免费| 国产一级小视频| 国产亚洲一级特黄大片在线| 国产网友愉拍精品视频手机| 国产日韩综合av在线| 免费网站看av片| 一本加勒比hezyo无码人妻| 一本一本久久久久a久久综合激情| 天天插天天干天天操| 国产偷窥熟女精品视频大全 | 日韩在线视频线观看一区| 国产成AV人片久青草影院| 伊人久久大香线蕉av五月天| 120秒试看无码体验区| 亚洲欧美一区二区成人片| 国产午夜福利在线观看播放 | 九九热视频在线精品18| 精品国产中文字幕在线| 日韩精品一区二区亚洲专区| 国产精品无码不卡在线播放| 亚洲精品理论电影在线观看|