OC中的Block 塊語法 相關知識

2021-07-04 02:02:33 字數 1859 閱讀 8718

block的資料型別格式:

返回值型別: (^)(引數型別1 引數名1, 引數型別2 引數名2, ...)

注: 1.

沒有引數

, 括號不能省略

2. 引數名可以省略, 特殊情況下, 為了方便使用, 不省略

block賦值(實現)

//格式:

// ^(資料型別1 引數名, 資料型別2 引數名2, ...) 注

: 1. 引數名不能省略

2. 如果block有返回值, 需要使用return返回值

block的運用

1. 使用typedef對block型別重新命名 例:

2. block內部訪問變數

//block內部不能修改區域性變數, 可以修改全域性變數

//在block內部修改區域性變數, 需要在區域性變數前加__block

3. block作為方法的引數(block排序)

例: 對乙個陣列內的字串(數字)進行排序

//字串是數字時的排序

nsarray *array3 = [nsarray arraywithobjects:@"123", @"10", @"43", @"5", nil];

//使用block定義乙個塊方法

nscomparator rulearray = ^(nsstring *oil1, nsstring *oil2)

if (num1 < num2)

return nsorderedsame;

};nsarray *soft3 = [array3 sortedarrayusingcomparator:rulearray];

nslog(@"%@", soft3);

再來乙個例子, 對乙個學生陣列, 按照學生成績和姓名進行排序

student *stu1 = [[student alloc] initwithname:@"耿申" score:59.9];

student *stu2 = [[student alloc] initwithname:@"楊超" score:98];

student *stu3 = [student studentwithname:@"李高傑" score:80];

student *stu4 = [student studentwithname:@"葫蘆娃" score:70];

//學生陣列

nsarray *studentarray = [nsarray arraywithobjects:stu1, stu2, stu3, stu4, nil];

//排序的學生陣列

nsarray *sotr1 = [studentarray sortedarrayusingcomparator:^nscomparisonresult(student *obj1, student *obj2)

if ([obj1 score] < [obj2 score])

return nsorderedsame;

}];nslog(@"---------按分數排序--------");

for (student *stu in sotr1)

nslog(@"---------按姓名排序--------");

nsarray *sort = [studentarray sortedarrayusingcomparator:^nscomparisonresult(student *obj1, student *obj2) ];

for (student *stu1 in sort)

注: 這裡面有一段方法是將漢字轉化為拼音的, 不過有一定的侷限性, 如果漢字是多音字的時候, 可能會轉化的不太準確, 請大家慎重使用

以上個人總結的一些東西, 如果大家發現有錯的話, 歡迎提出來, 大家一起進步哦!

OC中Block相關問題總結

1.block中相互引用問題解決方案 weak thirdviewcontroller weakself self weak typeof self weakself self 2.為什麼block使用copy而不用strong property nonatomic copy void block ...

block語法塊的初級理解

implementation viewcontroller void viewdidload nslog 1f myblock 20.0,12 簡單的implementation部分的實現 float myblock float,int float a,int b 首先第乙個float是返回的引數值...

20150626 OC之Block塊的簡單使用

main.m ios150626 objectivec block塊 created by pengjunlong on 15 6 26.import 函式指標 int add int a,int b add的型別是 int int,int typedef int padd int,int padd...