日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Objective-C知识总结(5)

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Objective-C知识总结(5) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

block的基本使用

1 // 有參有返回值 2 /* 3 格式: 4 返回值類型 (^變量名)(參數類型及個數) = ^(形參列表){ 5 6 代碼塊語句; 7 8 return ; 9 10 }; 11 12 */ 13 // 定義一個有參數\有返回值的block 14 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 // 無參無返回值 block 64 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); // 10 20 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); // 100NSLog(@"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作為函數的返回值

// 定義了一個新的類型 newType2 typedef 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)

轉載于:https://www.cnblogs.com/melodyzhy/p/4684559.html

總結

以上是生活随笔為你收集整理的Objective-C知识总结(5)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黑人操日本女优 | 亚欧美在线观看 | 免费在线小视频 | 国产精品wwww| 国产三级网站 | 国产 欧美 日韩 在线 | 黄色网战大全 | 少妇精品偷拍高潮白浆 | 欧美日韩精品一区 | 中文字幕一区二区人妻在线不卡 | 午夜做爰xxxⅹ性高湖视频美国 | av老司机久久 | 岛国二区 | 成人福利视频在线观看 | 国产毛片不卡 | 啪啪免费小视频 | 亚洲一区二区色图 | 日本少妇作爱视频 | 国产福利小视频 | 91片黄在线观看喷潮 | 污污污污污污www网站免费 | 久久久国产精华液999999 | 天天看夜夜 | 少妇人妻一级a毛片 | va婷婷| 狠狠干天天操 | 免费看黄色片视频 | 亚洲av综合永久无码精品天堂 | 女人高潮娇喘声mp3 乱色视频 | 国产又粗又猛又色又 | 欧美顶级metart裸体全部自慰 | 精品人妻一区二区三区日产 | 日本护士体内she精2xxx | 在线观看三区 | 国产91精选| 亚洲精品影院 | 手机在线看片 | 日本精品一区二区 | 一区二区三区久久久 | 人人爱爱人人 | 91精品在线视频观看 | 国产成人无遮挡在线视频 | 山村大伦淫第1部分阅读小说 | 午夜久久久久久久久久久 | 欧美亚洲日本一区 | 日本不卡网 | 国产精品1000部啪视频 | 成人黄色免费网址 | 欧美另类专区 | 亚洲精品成人a | 欧美毛片视频 | 中文字幕亚洲视频 | 欧美另类极品videosbest最新版本 | 麻豆高清免费国产一区 | 69av视频在线观看 | 国产精品777 | 97国产资源 | 97精品人妻麻豆一区二区 | 综合色导航 | 一区二区视频国产 | 免费看裸体视频网站 | 色婷婷午夜| 一卡二卡三卡四卡五卡 | 亚洲最大视频网 | 免费的毛片网站 | 一级黄在线观看 | 精品视频久久久久 | 中文字幕日韩一区二区三区不卡 | 韩国伦理片在线观看 | 无码粉嫩虎白一线天在线观看 | 午夜天堂精品久久久久 | 亚洲av无码一区二区乱孑伦as | 射影院| 网站黄色在线观看 | 超碰自拍 | 国产宾馆实践打屁股91 | 国产精品免费看 | 一区二区成人av | 国产av一区二区三区 | 成人欧美在线视频 | 国产精品一二区在线观看 | jizzjizzjizz亚洲| 麻豆婷婷 | 成人在线观看www | 污视频免费看 | 69xxx中国| 亚洲在线| 亚洲情趣 | 性生活视频播放 | 四季av一区二区三区免费观看 | 久久婷婷影视 | 激情网站视频 | 中文字幕在线不卡视频 | 性一交一乱一色一视频麻豆 | 五月天视频网站 | 日本护士体内she精2xxx | 天堂av.com | 无码国模国产在线观看 | 成人国产一区二区三区精品麻豆 |