iOS 程式碼塊(block)的使用
脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可以執行的程式碼)。 下圖是如何把塊變數賦值給一個變數的語法講解:
按照呼叫函式的方式呼叫塊物件變數就可以了。
蘋果官網的例子
int (^Multiply)(int, int) = ^(int num1, int num2) { return num1 * num2; }; int result = Multiply(7, 4); // Result is 28.
1、引數是NSString*的程式碼塊
void (^printBlock)(NSString *x);
printBlock = ^(NSString* str)
{
NSLog(@"print:%@", str);
};
printBlock(@"hello world!");
執行結果是:print:hello world!
2、程式碼用在字串陣列排序
NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil]; NSComparator sortBlock = ^(id string1, id string2) { return [string1 compare:string2]; }; NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock]; NSLog(@"sortArray:%@", sortArray);
執行結果:sortArray:( "abc 05", "abc 1", "abc 12", "abc 13", "abc 21")
3、程式碼塊的遞迴呼叫
程式碼塊想要遞迴呼叫,程式碼塊變數必須是全域性變數或者是靜態變數,這樣在程式啟動的時候程式碼塊變數就初始化了,可以遞迴呼叫
static void (^ const blocks)(int) = ^(int i)
{
if (i > 0)
{
NSLog(@"num:%d", i);
blocks(i - 1);
}
};
blocks(3);
執行列印結果:
num:3
num:2
num:1
4、在程式碼塊中使用區域性變數和全域性變數
在程式碼塊中可以使用和改變全域性變數
int global = 1000;
int main(int argc, const char * argv[])
{
{
void(^block)(void) = ^(void)
{
global++;
NSLog(@"global:%d", global);
};
block();
NSLog(@"global:%d", global);
}
return 0;
}
執行列印結果:
global:1001
global:1001
而區域性變數可以使用,但是不能改變。
int local = 500;
void(^block)(void) = ^(void)
{
local++;
NSLog(@"local:%d", local);
};
block();
NSLog(@"local:%d", local);
在程式碼塊中改變區域性變數編譯不通過。怎麼在程式碼塊中改變區域性變數呢?在區域性變數前面加上關鍵字:__block
__block int local = 500;
void(^block)(void) = ^(void)
{
local++;
NSLog(@"local:%d", local);
};
block();
NSLog(@"local:%d", local);
執行結果:local:501
local:501 "abc 1", "abc 12", "abc 13", "abc 21"
相關推薦
iOS 程式碼塊(block)的使用
程式碼塊本質上是和其他變數類似。既可以做變數使用,也可以當函式使用。不同的是,程式碼塊儲存的資料是一個函式體。使用程式碼塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可
一篇文章看懂iOS程式碼塊Block
iOS程式碼塊Block 概述 程式碼塊Block是蘋果在iOS4開始引入的對C語言的擴充套件,用來實現匿名函式的特性,Block是一種特殊的資料型別,其可以正常定義變數、作為引數、作為返回值,特殊地,Block還可以儲存一段程式碼,在需要的時候呼叫,目前Block已經廣泛應用於iOS開發
IOS 程式碼塊之block的宣告、建立、傳參的基本使用
Block 是iOS在4.0之後新增的程式語法,在iOS SDK 4.0之後,block應用幾乎無處不在。 在其他語言中也有類似的概念稱做閉包(closure),比如object C的好兄弟Swift 中閉包(swift 閉包詳解)的使用跟 OC的block一樣
[ios開發基礎之]程式碼塊 ——block
iOS4引入了一個新特性,支援程式碼塊的使用, 這將從根本上改變你的程式設計方式。程式碼塊是對C語言的一個擴充套件,因此在Objective-C中完全支援。如果你學過Ruby,Python或Lisp程式設計 語言,那麼你肯定知道程式碼塊的強大之處。簡單的說,你可以通
iOS 程式碼塊(block)使用基礎
程式碼塊本質上是和其他變數類似。不同的是,程式碼塊儲存的資料是一個函式體。使用程式碼塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。 脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可以執行的程式碼)
iOS 程式碼塊( 閉包 )基本語法
block 語法格式( OC ) 在 Xcode 裡面直接敲 block ( 或者 inlineBlock 的一部分 ) 然後敲回車 我們會發現有以下智慧提示: <#returnType#>(^<#blockName#>
Objective-C語法之程式碼塊(block)的使用
程式碼塊本質上是和其他變數類似。不同的是,程式碼塊儲存的資料是一個函式體。使用程式碼塊是,你可以像呼叫其他標準函式一樣,傳入引數數,並得到返回值。 脫字元(^)是塊的語法標記。按照我們熟悉的引數語法規約所定義的返回值以及塊的主體(也就是可以執行的程式碼)。下圖是如何把塊
iOS block程式碼塊強引用問題
block程式碼塊在iOS開發中經常見到,例如AFN資料請求就是block,值得注意的是在block中不恰當的操作程式碼,會導致資源不被釋放,導致記憶體洩漏,例如下面的資料請求: __weak typeof(self) weakSelf = self; [
IOS學習之block程式碼塊
前言: block這個名詞對於做一般開發者來說可能會覺得稀奇古怪而非常陌生,但是對於iOS工程師來說,在整個開發中到處都是它的影子,今天一大早覺得在假期學習一下它,對明年的iOS開發工作做個準備,突然有點找回當年即將畢業時的最後一個春節假期的感覺,今天基於最近使用的角
初探iOS中的Block(程式碼塊與閉包)
支援原創,轉載請註明博主與博文連結,3Q —— by atany 一、Block是什麼? Block就是一個包含函式體的物件,有時候也被叫做閉包。 概念可能還是有
iOS之Block程式碼塊的定義及使用
不會使用Block的iOS程式設計師,不是一個合格的程式設計師 Block沒有你想象中的那麼難,不要害怕,不要畏懼,勇敢嘗試 Block進階: Block其實就是一個程式碼塊,把你想要執行的程式碼封裝在這個程式碼塊裡,等到需要的時候再去呼叫。 個人覺得
IOS開發 block(程式碼塊)基本使用
1. block基本概念: (開篇廢話) Block是C級別的語法和執行時特性。Block比較類似C函式,但是Block比之C函式,其靈活性體現在棧記憶體、堆記憶體的引用。 Block是蘋果推薦的型別,效率高,可以幫助我們組織獨立的程式碼段,並提高複用性和
ios xcode 設定程式碼塊
在Xcode中自定義自己的快速程式碼,很簡單,用起來也很方便 首先選擇自己想要的自定義的程式碼塊 拖拽到紅框的區域鬆手,會彈出設定視窗 這是我的填寫 這裡有另外一個技巧,可以給自己想要改變的地方設定成預留字(預留字是我自己隨口胡鄒的名詞) 總之,如果你想把b
C++ Block(程式碼塊)
Block是什麼? Block是C語言的一個語法特性,同時也是C語言的執行時特性,它很像C中的函式指標,因為你可以像使用函式指標一樣的去使用block物件;它也很像C++中的函式物件,因為除了要執行的程式碼,block還可以攜帶和block繫結的狀態資訊。
iOS 使用巨集定義函式和程式碼塊
iOS使用巨集定義函式和程式碼塊 今天在開發過程中碰到一個問題:就是父類中要向外傳送通知,然後子類中或者其他類中來接收它。當然一般是把它寫到類方法中去,但是有個問題,就是如果呼叫的類不是它的子類,就不能直接呼叫,當然也可以採用靜態方法實現,我這裡主要是想用巨集
iOS-- xcode10 自定義程式碼塊的位置
自定義程式碼塊在Xcode中的路徑(方便下次換電腦時使用~) ~/Library/Developer/Xcode/UserData/CodeSnippets 程式碼塊都在某個檔案中,
iOS 註釋方法大全 程式碼塊加快捷鍵自定義註釋
註釋規範 良好的編碼規範是程式設計師必備的素質,編碼中的程式碼註釋尤為重要,健全的程式碼註釋可以提高程式碼可讀性和維護性,不僅為了標識此塊程式碼的含義,很多時候包含了對業務邏輯的解釋,專案中難免有邏輯複雜之處,不加註釋的程式碼,數日後自己看都會覺得陌生,更不
iOS開發之Xcode自定義程式碼塊遷移
本文介紹了程式碼塊遷移的過程. 背景:由於最近換了新的mac,所以,要做自定義程式碼塊的遷移. 一.Xcode中的程式碼塊. 二.開啟 Finder,快捷鍵Command +
iOS應用意見反饋程式碼塊
#pragma mark - 3.擷取兩個字串之間的文字,修改其顏色 /** * 3.擷取兩個字串之間的文字,修改其顏色 * * @param LongString 原來的字串 * @param beforeString 前面的字串 * @param
iOS-#ifdef DEBUG程式碼塊介紹
iOS-#ifdef DEBUG巨集定義介紹 一.#ifdef DEBUG程式碼塊 #ifdef DEBUG // Debug 模式的程式碼... #else // Release 模式的程式碼... #endif 二.#DEBUG定義