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...