今天學的是block的使用
#import
#import
"person.h"(相信看過前面的 person類都知道怎麼定義了,這裡就不寫上了)
int sumvalue(int a ,int b )
block
作為引數
體現優勢
實現兩個數的加減
加減乘除
int resulttwonumber1(int num1,int num2, int(^ block)(int a,int b))
main函式 回顧
函式指標
:指向函式的指標
int (*p)(int a ,int b) =null;
p = sumvalue;
// 函式指標呼叫
p(3,5);
printf("%d\n",p(3,5));
block(
匿名函式
)的標誌
^託字元
(凸起符
) :
block
儲存的是
有特定功能的函式體
資料型別
+變數名=初值
int (^
變數名)(int a ,int b) = ^初值(
跟前面的型別要一致
)初值的部分
是乙個沒有名字的
函式體
int (^block)(int a ,int b) = ^int (int a,int b);
nslog(@"%d",block(3,4));
列印的block
傳什麼引數
列印引數的
block
無返回值
void
void (^printfblock)(nsstring *str) = ^void (nsstring *str);
// block的呼叫 直接使用block的名字去呼叫
printfblock(@"嘻嘻");
練習題:寫⼀個
返回值為整型
引數為nsstring
(僅⼀個引數)的
block
,實現將字串轉換為整型的功能。
需要知道的東西:
block
型別nsinteger (^)(nsstring *str)
block
名becomeintblock
block
的值匿名的函式
並且型別與
block
型別相同
匿名函式是函式
其函式中間定義的變數
存在棧區
nsinteger (^becomeintblock) (nsstring *str) = ^nsinteger (nsstring *str);
nslog(@"%ld",becomeintblock(@"123"));
練習題:寫乙個計算兩個整數和差的匿名函式
int (^block) (int a,int b ) = ^int(int a,int b);
int (^sub) (int a,int b ) = ^int(int a,int b);
block
作為引數
體現優勢
實現兩個數的加減
加減乘除
ui中主要為了傳值的
int result =resulttwonumber1(15,3, ^int(int a,int b) );
block
的好處當把
block
當作乙個引數
傳入方法中
非常的靈活
可以靈活的掌控
block
的實現,
也就是你傳入的
block
實現的是什麼功能,
你這個方法就實現什麼
block
排序sortusingcomparator:^nscomparisonresult(
idobj1,
idobj2)
實現部分:填寫
obj1
和obj2
的關係實現原理
:陣列中兩個元素進行比較
比較後返回值
如果前面大
則交換經此比較到最後乙個元素
完成排序
nsmutablearray *array = [nsmutablearray arraywithobjects:@"11",@"12",@"6",@"9" ,nil];
[array sortusingcomparator:^nscomparisonresult(id obj1,id obj2)
elseif ([str1 compare:str2] == 0) else
}];
compare:
可以比較的型別
1.字串型別
(nssstring)
2.nsnumber *
型別語法糖初始化
nsnumber
型別方法
nsnumber *n1 = @11;
nsmutablearray *array = [nsmutablearrayarraywithobjects:@11,@12,@6,@9 ,nil];
nscomparisonresult(^mycompare)(id obj1,id obj2) = ^nscomparisonresult(id obj1,id obj2)elseif ([str1 compare:str2] ==0)else
// 根據型別 確定公升序 還是降序
};// 需要什麼型別 咱們就給什麼型別就行
[array sortusingcomparator:mycompare];
nslog(@"%@",array);
[array sortwithoptions:(
並行或者序列選擇
)不影響結果
usingcomparator:^nscomparisonresult(id obj1, id obj2) ]
字面量的使用
(語法糖)切記
:字面量使用的是初始化方法
是類方法初始化
nsarray *array = [nsarray arraywithobjects:@"1",@"2" ,nil];
// 相當於
nsarray *arrayn =@[@"1",@"2"];
取出乙個元素
arrayn objectatindex:0];
// 相當於
arrayn[0];
nsnumber *num = [nsnumbernumberwithint:11];
// 相當於
nsnumber *num1 =@11;
字典
nsdictionary *dic =@;
給block
起別名
typedefint (^sum) (int a,int b );
sum sumblock = ^int(int a,int b);
iOS學習筆記 第六天
今日學習概述 今天主要進行ios開發中經常被用到的uiscrollview控制項的學習,包括其基本使用 常見屬性 的注意點等。什麼是uiscrollview 利用uiscrollview顯示一張大 1.建立乙個uiscrollview uiscrollview scrollview uiscroll...
第六天學習
變數的作用域 區域性變數 在函式內部定義的變數,這個變數只能在函式內部使用,在全域性當中不能使用。使用就報錯了。全域性變數 在函式外部定義的變數,這個變數可以在全域性使用。但是我們一般不推薦使用全域性變數 因為可能會意外的修改掉變數的值。迫不得已不要用全域性變數 衝突處理原則 就近原則。而不是從上到...
學習第六天
還有九天,我就要去參加北大3日遊了。滑稽 像我這樣的蒟蒻去那也就是旅遊模式吧!無所謂了,隨便去考考,說不定有優秀營員呢?滑稽 不可能,絕對不可能 相信自己好了。這麼多天,好像把面試給忘了,雖然有人說面試是瞎 但是還是要準備準備的 明天看吧!還有什麼知識點沒看嗎?我們來看看st表和hash表吧!先看看...