block的用法和陣列排序

2021-06-25 10:23:54 字數 1435 閱讀 1462

,block我們

都知道函式只可以巢狀呼叫

,但決不允

許函式的巢狀定義,

這有時給我

們帶來了很大的不便,而

oc提供的

block用法為

我們解決了這個問題

,下面簡單說一下

1,block

的用法:

(1)block

是用來儲存函式

,所以給block

賦值時賦

的是整個函式的實現,

例如,要在main

函式裡寫乙個求兩個數的和的函式,返回

值為整型,引數

為兩個整型

,通常在函式外面會這樣寫

intsum(

intx,

inty)

如果要在函式內部寫就需要用到

block

語句寫法如下

:int

(^sum)(

intx,

inty) = ^(

intx,

inty);

block

變數的型別是

:int

(^)(

intx,

inty) (

這裡的」(^)」

是系統規定的

block

寫法) sum

是block

變數的名字

, "="

號右邊的

^(int

x, inty);

是block

變數的初始值

,當把函式的實現賦給

block

後,block

變數sum就可以當做函式名使用

如:nslog

(@"sum = %d"

,sum (5,

10));

從block的定義

可以看出它跟函式指標的定

義很相似

,唯一不同就是函式指

針的型別定義時

是用(*),

而block

是用(^).

(2),此外當在block外面定義了

變數(區域性

變數),如果沒有在

變數前加上"__block"修

飾,則在block內部無法

對該變數修改,在block內部系

統識別該變

量是readonly不可修改的,如果要修改block外邊的

變數,必須將

該變數用"__block"修

飾.block外部的區域性

變數被"__block"修

飾後在block內部告

訴編譯器不要再把

該變數當做常量來看待,但是若在block內部

訪問全域性

變數,則

不需要用__block修

飾,有關全域性變數下面可以再詳細的敘述一下;

block 陣列排序

import 定義 乙個block,返回值為bool,有兩個nsstring引數。實現 判 斷字串是否相等。bool comparestring nsstring nsstring nsstring str1,nsstring str2 else if comparestring sss sss 定...

StringBuffer和陣列排序

1 stringbuffer 1 構造方法 public stringbuffer 預設的容量是16 public stringbuffer string str 容量是str的長度加上16 public stringbuffer int capacity 輸入指定的容量.2 成員方法 public...

extern指標和陣列的用法

void main 你可以選擇除錯,或者去看彙編 但是問題的本質,也許不是那麼簡單的,因為我們選擇任何除錯的時候都是經過編譯完成之後所看到的,而這個錯誤恰恰需要我們去提前認識到在編譯的時候做了乙個怎麼樣的處理。在學習的時候也許有過這樣的解釋,指標和陣列是不同的,只是有時候可以通用而已。在extern...