OC中的block的用法總結

2021-07-08 17:18:24 字數 1788 閱讀 5930

1. block 的基本概念   // 了解

block是乙個型別,可以定義變數,它的變數是用來存**塊.

2.block的基本用法   // 固定寫法牢記

block最簡單形式

定義格式:void (^block名) ( ) =^

使用格式:  block名( ); 

/* 定義是,把block當初資料型別

特點:1,型別比函式定義多了乙個^ 

2.設定數值,有乙個^,內容是{}括起的一段**

void (^myblock)()=^;

myblock( ); 

*/ #import

// 定義了乙個沒有引數,沒有返回值的block變數,並且賦值了

// 優化版  void (^myblock4) ( )=^{}  去掉了一對小括號

void (^myblock4) ( )=^( ) ;

myblock4( );   // 使用block變數

// 第二種格式:  有參無參返回值

// 定義乙個變數myblock2 同時進行賦值

void (^myblock2) (int, int)=^ (int a, int b);

myblock2(34,12);

return; };

// 第三種格式: 有參有返回值型別

返回值型別(^變數名) (引數型別及個數)=^(形參列表);

// 給變數重新賦值

myblock1=^(int x ,int y) ;

sum=myblock (10,20) ;

nslog(@"sum=%d",sum);

6.block的typedef 

格式:typedef 返回值型別(^block變數名) (引數型別列表);

typedef  int(^myblock)(int,int);

// 給無參無返回值block變數起別名;

// 用新的型別定義block變數  newtype t1;

t1=^;

使用block t1();

8.block 訪問外部變數   // 重點掌握

1) 在block內部可以訪問block外部的變數,但是注意,這是乙個新的記憶體空間變數.

block內部也可以定義和block外部同名的變數(區域性變數),此時區域性變數會暫時遮蔽外部變數的作用域.

2) 在block內部不可以修改block外部的變數,防止破壞**的可讀性,也不利於維護.

給區域性變數加上__block關鍵字,則這個區域性變數可以在block內部修改

for example :

#import

int main();

return 0; }

for example 2:

#import

int main ( ) ; 

nslog(@"6:m add=%p",&m);   // 堆區的位址

myblock();

return 0; }

OC中Block相關問題總結

1.block中相互引用問題解決方案 weak thirdviewcontroller weakself self weak typeof self weakself self 2.為什麼block使用copy而不用strong property nonatomic copy void block ...

OC中的Block,多型

首先我們來找一下每個區域內的記憶體位址 棧int a 10 nslog p a 堆 int p malloc 40 nslog p p 全域性靜態區 static int b 10 nslog p b 常量區 常量字串,儲存的是首位址 char str iphone nslog p str 區 ns...

oc中block的理解

block可能是我在學習objective c語法中遇到的第乙個puzzle的地方。確實,這個語法takes some getting use to.block實際是一種閉包,它是oc中對閉包的實現。閉包是什麼?清楚地記得這個是我去年在參加鵝廠的實習筆試的時候的乙個大題,記得沒錯是第二個大題。any...