我的iOS學習歷程 OC第六天

2021-07-06 08:57:17 字數 3823 閱讀 3540

今天學的是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表吧!先看看...