1.block的本意
block本質上也是乙個oc物件,它內部也有個isa指標,block是封裝了函式呼叫以及函式呼叫環境的oc物件,
block是封裝函式及其上下文的oc物件
2.block截獲變數
#import "sydblcok.h"編譯後結果// 全域性變數----不截獲全域性變數
int global_var = 4;
// 靜態全域性變數-----不截獲全域性靜態變數
static int static_global_var = 5;
@implementation sydblcok
-(void)method ;
nslog(@"判斷執行順序");
// 區域性靜態變數 -----isa指標
multiplier_static = 4;
nslog(@"result is %d",block(2));
}
2019-04-16 14:59:38.854104+0800 auditiontest[64047:1220987] viewdidloadcpp檔案解析2019-04-16 14:59:42.067785+0800 auditiontest[64047:1220987] multiplier_static:3
2019-04-16 14:59:42.067970+0800 auditiontest[64047:1220987] 判斷執行順序
2019-04-16 14:59:42.068081+0800 auditiontest[64047:1220987] 區域性變數》基本資料型別:6
2019-04-16 14:59:42.068182+0800 auditiontest[64047:1220987] 區域性變數》物件型別(null)----strong:(null)
2019-04-16 14:59:42.068276+0800 auditiontest[64047:1220987] 區域性static:4
2019-04-16 14:59:42.068366+0800 auditiontest[64047:1220987] 全域性變數4
2019-04-16 14:59:42.068459+0800 auditiontest[64047:1220987] 靜態全域性變數:5
2019-04-16 14:59:42.068563+0800 auditiontest[64047:1220987] result is 8
__main_block_desc_0 :block描述資訊
block_size:block的大小
3. block修飾符
/*4.迴圈引用* 修飾符的使用----對被截獲變數進行賦值操作的時候 */
-(void
)block_property ;
block();
nslog(
@"array:%@
",array);
}// 賦值操作不需要修飾符
-(void)block_property ;
block();
nslog(@"array:%@",array);
}
//迴圈引用
-(void
)aroundblock ;
//self z持有block, block有成員變數 array,持有self
strblock(@"
eden");
}-(void
)aroundblock ;
//self z持有block, block有成員變數 array,持有self
strblock(@"
eden");
}
//block本身是像物件一樣可以retain,和release。但是,block在建立的時候,它的記憶體是分配在棧(stack)上,而不是在堆(heap)上。他本身的作於域是屬於建立時候的作用域,一旦在建立時候的作用域外面呼叫block將導致程式崩潰。weakself 配合strongself 使用,防止在block執行的時候self提前突然被釋放,也有可能閃退
__weak __typeof__(self) weakself =self;
dispatch_async(dispatch_get_global_queue(dispatch_queue_priority_default,
0), ^);
}-(void
)dosomething
-(void
)dootherthing
使用retain也可以,但是block的retain行為預設是用copy的行為實現的,因為block變數預設是宣告為棧變數的,為了能夠在block的宣告域外使用,所以要把block拷貝(copy)到堆,所以說為了block屬性宣告和實際的操作一致,最好宣告為copy。
SG全方位攻略
乙個 3 分球 就可以逆轉戰況,贏得勝利 如果說中鋒是主宰禁區的守護神,那麼得分後衛 sg 的職責就可以說是負責在外圍放冷箭得分。比起身高 速度和跳躍力來說,得分後衛更注重於 需要手感的中長距離投籃 機動靈活的敏捷性 以及 卓越控球的能力 三方面,而在攻擊時,主要是以 3 分線的投籃和擔任快攻的箭頭...
微軟WSFC全方位解析
windows server failover clustering是微軟重要的windows server功能,它為微軟眾多企業級平台提供底層高可用機制,掌握wsfc的概念原理,功能使用,故障排錯將對管理員運維有很大幫助,本系列文章將從wsfc的概念介紹,功能使用,故障排錯,效能優化,wsfc 2...
Unity全方位觀察物體
最近的專案中遇到了乙個需求 要求能全方位並細緻的觀察物體。一開始我的想法是物體旋轉,然後相機能夠縮放視角,於是立馬著手寫出了以下的 float x float y float xspeed float yspeed private void update else if input.getaxis ...