亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Objective-C知識總結(5)

2019-11-14 18:37:20
字體:
來源:轉載
供稿:網友

block的基本使用

 1  // 有參有返回值 2         /* 3           格式: 4          返回值類型 (^變量名)(參數類型及個數) = ^(形參列表){ 5           6                   代碼塊語句; 7           8                   return ; 9          10          };11          12          */13         // 定義一個有參數/有返回值的block14         int (^myblock1)(int ,int) = ^(int x,int y){15         16             return x+y;17         18         };19         20         int sum = myblock1(10,20);21         NSLog(@"sum = %d",sum);22         23         // 給變量重新賦值24         myblock1 =^(int x,int y){25             26             return x*y;27             28         };29         30         // 使用block,接收返回值31         sum = myblock1(10,20);32         NSLog(@"sum = %d",sum);33  34         // 有參無返回值35         36         /*37          格式:38          void (^變量名)(參數類型及個數) = ^(形參列表){39          40                代碼塊語句;41          42          };43          44          */45         // 定義一個變量myblock2 同時進行賦值46         void (^myblock2)(int ,int )=^(int a,int b){47         48             NSLog(@"a + b = %d",a+b);49         50         };51         52         myblock2(34,12);53         54         // 先定義變量,再賦值55         myblock2 = ^(int x,int y){56         57             int m = x>y?x:y;58             NSLog(@"max = %d",m);59         60         };61         myblock2(34,12);62         63         // 無參無返回值 block64         65         /*66           //定義一個沒有參數/沒有返回值的block變量,并且賦值了67           void (^block變量名)() = ^(){68          69                 代碼塊的語句;70           };71          72           優化:73           void (^block變量名)() = ^{74          75          代碼塊的語句;76          };77          78           //block變量的使用79           block變量名();80          81          */82         83         void (^myBlock4)()=^{84         85             NSLog(@"xxxx");86             PRintf("xxxxxx");87         88         };89         90         //使用block變量91         myBlock4();

block的typedef

 typedef int (^myBlock)(int,int);        myBlock a = ^(int x, int y){            return x + y;        };        int c = a(1,2);       

block訪問外部變量

 1 int main(int argc, const char * argv[]) { 2     @autoreleasepool { 3         int m = 10; 4          5         NSLog(@"1:m = %d",m);   // 10 6         NSLog(@"2:m addr = %p",&m);         // 棧區 7         //        NSString *str = @"abc"; 8         //        NSLog(@"str = %p",str); 9         10         // 定義變量,并且賦值11         // 當定義block的時候,block會把外部變量以const的方式復制一份12         // 存放到block的所在的內存中13         void (^myBlock)()=^{14             // m的值不能被修改15             // m = 100;16             17             NSLog(@"5:m addr = %p",&m);     // 堆區18             // 可以訪問m的值19             NSLog(@"3:in block m = %d",m);  // 1020             21         };22         23         NSLog(@"4:m addr = %p",&m); // 棧區24         // 使用25         myBlock();26            }27     return 0;28 }

打印結果為

// 全局變量存在于數據段int n=0;int main(int argc, const char * argv[]) {    @autoreleasepool {        __block int m = 10;        NSLog(@"1:m add  = %p",&m);   // 棧區地址        NSLog(@"2:m = %d",m);        n = 10;        NSLog(@"7:n add = %p",&n); // 數據段        NSLog(@"8:n = %d",n);  // 10        // 靜態變量        static int a = 33;        NSLog(@"----------%p", &a); // 數據段           // __block 不在以const的方式拷貝        void (^myBlock)()=^{            int x = 100; // 棧區            // m的值可以被修改            m = 100;            // 全局變量可以修改            n = 100;            // 靜態變量可以修改            a = 10;            NSLog(@"4:m addr = %p",&m);     // 堆區            // 可以訪問m的值            NSLog(@"3:in block m = %d",m);  // 100                        NSLog(@"9:n add = %p",&n); // 數據段            NSLog(@"10:n = %d",n);     // 100        };        myBlock();                NSLog(@"5:m = %d",m);  // 100        NSLog(@"6:m addr = %p",&m); // 堆區                NSLog(@"11:n add = %p",&n); // 數據段        NSLog(@"12:n = %d",n);      // 100           }    return 0;}

打印結果為

block使用注意

靜態變量 和 全局變量 在加不加 __block都會直接引用變量地址。也就意味著 可以改變修改變量的值,在沒有加__block參數的情況下

全局block:定義在函數外面的block是global(全體的)的 另外如果在函數內部的block,沒有捕獲任何自動變量,那么它也是全局的

棧block:區別為是否引用了外部變量

堆block:是對棧block copy得來。對全局block copy 不會有任何作用,返回的仍然是全局block

block作為函數的返回值

// 定義了一個新的類型 newType2typedef int(^myBlock)(int ,int );myBlock test(){    // 返回block類型    return ^(int a,int b){        return  a+b;    };}int main() {    myBlock n = test();    int a = n(1,2);    NSLog(@"a = %d", a); // 3}

block助記符 inlineblock

block 也可以這么定義

// 可以加上形參int (^block)(int x,int y) = ^(int x, int y){             return x + y;};

協議 Protocol

什么是協議?

一些方法的聲明,一般寫到一個.h的頭文件中

方法有兩種: 1) 必須實現  2) 選擇實現

協議的作用:

供其他的類去遵守,如果一個類遵守了一個協議,就應該實現這個協議中定義的必須要實現的方法

協議的寫法

@protocol xxxx <NSObject>// 必須實現的方法(默認)@required// 可選實現的方法@optional@end

遵守協議的步驟:  1) 導入 頭文件  2) 遵守協議  3) 實現方法

protocol類型限制

第一種類型限制:給id類型增加限制

id<xxxxxxx> obj;

增加<xxxxxxx>以后,表示,obj只能賦值遵守了xxxxxxx協議的對象

id<xxxxxxx> obj = d;

第二種類型限制:

表示,obj2賦值的時候,必須是Girl對象,并其遵守 了 xxxxxxx協議.

Girl *mm = [Girl new];

Girl<xxxxxxx> *obj2 = mm;

protocol代理設計模式  

請看我之前的博客  >---請點擊這里---<

------------------------------------------------------------------------------------------------------------------------------------------------------------

其他四篇鏈家如下:

Objective-C知識總結(1)

Objective-C知識總結(2)

Objective-C知識總結(3)

Objective-C知識總結(4)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧日韩不卡在线视频| 91精品国产自产在线| 亚洲尤物视频网| 日本aⅴ大伊香蕉精品视频| 国产精品久久久久久av下载红粉| 97av视频在线| 亚洲一区二区中文字幕| 97在线观看免费高清| 欧美有码在线观看视频| 欧美专区在线视频| 26uuu国产精品视频| 日本高清不卡在线| 欧美激情极品视频| 夜夜嗨av色综合久久久综合网| 精品久久久久久久久久久久| 欧美一级bbbbb性bbbb喷潮片| 少妇精69xxtheporn| 亚洲精品成人网| 欧美香蕉大胸在线视频观看| 亚洲国产精久久久久久久| 岛国av一区二区在线在线观看| 国产精品69av| 永久免费毛片在线播放不卡| 中文综合在线观看| 欧美激情精品久久久久久大尺度| 色妞一区二区三区| 欧美国产在线电影| 欧美日本啪啪无遮挡网站| 亚洲人精品午夜在线观看| 国产一区二区黄| 不卡av在线播放| 亚洲精品综合精品自拍| 欧美日韩激情网| 91精品久久久久久久久久另类| 欧美激情va永久在线播放| 在线播放日韩专区| 日韩欧美福利视频| 国产午夜精品理论片a级探花| 国产一区视频在线播放| 久久久久久久电影一区| 国产精品揄拍一区二区| 伊人精品在线观看| 欧美激情免费观看| 亚洲黄色av女优在线观看| 国产一区二区三区在线观看网站| 国产91精品久久久久久久| 亚洲第一区中文字幕| 国产精品激情av在线播放| 国产亚洲综合久久| 日韩国产精品视频| 久久免费精品日本久久中文字幕| 国产免费一区二区三区在线观看| 欧美性高潮在线| 国产亚洲日本欧美韩国| 久久精品2019中文字幕| 国产精品成人久久久久| 国产美女直播视频一区| 久久免费国产精品1| 亚洲欧美国产一本综合首页| 亚洲精品久久久一区二区三区| 亚洲乱码av中文一区二区| 国产精品视频内| 久久久亚洲国产天美传媒修理工| 国产va免费精品高清在线观看| 日韩电视剧在线观看免费网站| 高清欧美性猛交| 国产丝袜一区二区三区| 国产精品亚洲美女av网站| 国产精品极品美女粉嫩高清在线| 欧美另类精品xxxx孕妇| 亚洲国产精品资源| 国内外成人免费激情在线视频| 久久视频在线观看免费| 亚洲免费人成在线视频观看| 日本高清视频一区| 日日骚久久av| 国产不卡在线观看| 国产精品第3页| 91中文在线观看| 欧美亚洲视频在线看网址| 亚洲午夜精品久久久久久久久久久久| 91网站免费看| 欧美日本国产在线| 久久成人免费视频| 亚洲国产精品悠悠久久琪琪| 国产精品久久久久aaaa九色| 国产精品久久久久久久久久久久久久| 欧美亚洲另类激情另类| 色多多国产成人永久免费网站| 欧美性xxxx在线播放| 国产日韩av在线播放| 国产精品xxxxx| 色樱桃影院亚洲精品影院| 精品久久久久久亚洲精品| 91精品国产91久久久久久吃药| 亚洲2020天天堂在线观看| 亚洲电影在线观看| 中文字幕一精品亚洲无线一区| 青青久久aⅴ北条麻妃| 草民午夜欧美限制a级福利片| 精品视频在线播放免| 国产精欧美一区二区三区| 欧美情侣性视频| 亚洲人成网站在线播| www.亚洲天堂| 亚洲精品成a人在线观看| 成人伊人精品色xxxx视频| 精品亚洲一区二区三区| 亚洲成成品网站| 538国产精品一区二区免费视频| 日韩在线欧美在线国产在线| 韩日精品中文字幕| 久久国产一区二区三区| 国产精品一区二区三区免费视频| 夜夜狂射影院欧美极品| 久久艳片www.17c.com| 久久视频在线直播| 欧美成人高清视频| 久久在线精品视频| 91国内在线视频| 国产精品青青在线观看爽香蕉| 亚洲欧美激情精品一区二区| 精品呦交小u女在线| 色婷婷综合久久久久中文字幕1| 午夜精品一区二区三区在线播放| 亚洲国产精品va在看黑人| 亚洲精品日韩久久久| 日韩成人av一区| 日韩在线播放一区| 精品爽片免费看久久| 国产人妖伪娘一区91| 亚洲精品之草原avav久久| 2019中文字幕在线免费观看| 一本色道久久88综合亚洲精品ⅰ| 中文字幕在线观看亚洲| 热re91久久精品国99热蜜臀| 日韩av在线一区| 搡老女人一区二区三区视频tv| 日韩一级黄色av| 久久av在线播放| 欧美三级欧美成人高清www| 成人免费大片黄在线播放| 久久人人爽亚洲精品天堂| 欧美夫妻性生活xx| 欧美性生交xxxxxdddd| 91九色视频在线| 国产精品久久久久999| 中文字幕国内精品| 奇米4444一区二区三区| 欧美日韩加勒比精品一区| 在线观看亚洲区| 色偷偷888欧美精品久久久| 久久精品国产免费观看| 国产在线一区二区三区| 日韩视频免费中文字幕| 亚洲一区二区日本| 亚洲一区av在线播放| 亚洲视频在线免费看| 91精品视频播放| 日韩欧美精品中文字幕| 一道本无吗dⅴd在线播放一区| 北条麻妃一区二区三区中文字幕| 成人欧美一区二区三区在线| 精品一区二区三区四区在线|