IOS 屬性 協議 Block用法

2021-07-30 18:58:30 字數 1142 閱讀 2558

1.傳值頁面宣告block屬性

//在想要回傳的介面中定義,block必須用copy來修飾(*注:secondviewcontroller.h中宣告)

//@property

(nonatomic, copy)nsarray *(^block)(nsstring *string);有返回值的後面必須兩個括號

@property

(nonatomic, copy)void(^block)(nsstring *string);

2.傳值頁面block裝箱操作

self.block(@"蘋果");//所謂裝箱,就是把要傳遞的字串"蘋果"賦值給引數(block引數定義的是字串)這個也是控制何時觸發的,當程式走到這行**時, 程式會跳轉到block內部, 執行方法
3.被傳值的頁面block卸貨操作

//初始化乙個secondvc物件

secondviewcontroller *secondvc. = [[secondviewcontroller alloc]init];

secondvc.block = ^(nsstring *string)

;//block傳值都必須是返傳,因為程式經過這段**時會判斷string有沒有值, 如果沒有就會越過block內部, 如果前一頁賦值給string引數, 程式馬上就會跳轉到block內部中去, 跟協議傳值大同小異

//關於block的記憶體問題

//1.如果要使用block作為乙個屬性,必須用copy

//2.如果用copy修飾的block中含有"self."都必須使用乙個弱引用的指標代替

//arm寫法:  __weak +型別 +指標名 = self;

//mrc寫法: __ block +型別 指標名 = self;

//block的記憶體位址轉移(m r c):

//1. 如果block變數內沒有使用任何外部變數,block就在全域性區

//2. 如果block內部使用了外部變數,block就被轉移到棧區

//3.如果block被copy,就被轉移到堆區

//block的記憶體轉移(a r c)

//1. 同上

//2.如果block內部使用了外部變數,直接就轉移到堆區

IOS中 Block簡介與用法

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...

IOS中 Block簡介與用法

block簡介 block的實際行為和function很像,最大的差別是在可以訪問同乙個scope的變數值。block實體形式如下 傳入引數列 block實體開頭是 接著是由小括號所包起來的引數列 比如 int a,int b,int c 行為主體由大括號包起來,專有名字叫做block litera...

IOS中 Block用法高階一

之前沒有寫部落格的習慣,總是一些 塊存在電腦,u盤,雲盤,就好像收藏古物一樣,和同事朋友交流討論到某個功能時也難一時看到 今後開始和剛入門的菜鳥們分享吧。它是一種比較特殊的資料型別。它可以儲存一段 在合適的時候取出來呼叫。定義格式 返回值型別 block 變數名 形參列表 形參列表 牢記定義格式 其...