iOS Block 學習

ios 4.0之后,block出現(xiàn)了。它極大地簡化了我們的編碼,給我們程序開發(fā)人員提供了一個離不開的回調方法。

一、在使用上,block類似于C語言里面的指針,但也存在一些區(qū)別。

1.block的代碼是內聯(lián)的,效率高于函數(shù)調用。

2. block對于外部變量,默認是只讀屬性。

3.block在Objective-C里,被當做對象進行處理。

二、block的修飾

ARC情況下

1.如果用copy修飾block,則該block就會保存在堆空間,就會對block的內部對象進行強引用,導致循環(huán)引用,內存無法釋放。

解決方法:新建一個指針(__weak typeof(target) weakTarget = target),指向代碼塊里的對象,然后用weakTarget進行操作,就可以解決循環(huán)引用問題。

2.如果用weak修飾block,該block就會存放在??臻g,不會出現(xiàn)循環(huán)引用問題。

MRC情況下

1.用copy修飾后,如果要在block內部使用對象,則需要進行(__block typeof(target) blockTarget = target)處理。在block里面用blockTarget進行操作。

三、block的定義

返回值類型 (^block變量名) (參數(shù)列表)=^(參數(shù)列表){};

block的調用 ? ? ? ? ?block變量名(實參)

注意:默認情況下 block內部不能修改外部的局部變量,即只讀屬性。想要修改的話,要給外部局部變量加上__block修飾。

block的三種定義方式

1.無參數(shù)無返回值

2.有參數(shù)無返回值

3.有參數(shù)有返回值

四、block的簡單用法

無參數(shù)無返回值的

-(void)func1 {

void(^emptyBlock)() = ^(){

NSLog(@"無返回值的block");

};

emptyBlock();

}

有參數(shù)無返回值

-(void)func2 {

void(^sumOfTwoNum)(inta,intb) = ^(inta,intb){

NSLog(@"The sum is:%d",a + b);

};

sumOfTwoNum(1,2);

}

有參數(shù)有返回值的block

-(void)func3 {

NSString*(^twoString)(NSString*str1,NSString*str2) = ^(NSString*str1,NSString*str2){

return[NSStringstringWithFormat:@"%@+++%@",str1,str2];

};

NSLog(@"%@",twoString(@"a",@"b"));

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 Blocks是C語言的擴充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了這...
    小人不才閱讀 3,869評論 0 23
  • 敲代碼快一周年了,項目沒有用過block慚愧留下學習心得; 我這了解的比較淺顯;基本語法 , 返回值類型(^變量名...
    倔強的仙人掌閱讀 228評論 0 0
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,617評論 30 472
  • title: OC_Note date: 2014-10-21 21:16:49tags: OC-NOTESima...
    我的夢想伴隨笑容而堅強閱讀 570評論 0 1
  • Block基礎回顧 1.什么是Block? 帶有局部變量的匿名函數(shù)(名字不重要,知道怎么用就行),差不多就與C語言...
    Bugfix閱讀 6,906評論 5 61

友情鏈接更多精彩內容