OC10-Block
生活随笔
收集整理的這篇文章主要介紹了
OC10-Block
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
棧區
int a = 10; NSLog(@"%p",&a);堆區
int *p=malloc(40); NSLog(@"%p",p);全局靜態區
static int b = 10; NSLog(@"%p", &b);常量區
常量字符串
char *str="iPhone"; NSLog(@"%p",str);代碼區
xx.m int addNum(int a,int b){return a+b; } main.m NSLog(@"%p",maxValue);函數指針的類型
NSInteger (*)(NSInteger ,NSInteger ); NSInteger ( *pointer)(NSInteger ,NSInteger)=maxValue; NSLog(@"%p",pointer);拿函數名進行調用
NSLog(@"%ld",maxValue(10, 5));拿函數指針進行調用
NSLog(@"%ld",pointer(10,5));四種形式的block
1.無參數,無返回值
void (^block)()= ^(){ NSLog(@"多云"); }; // 直接用block()調用 block(); // block自己不會執行,必須調用才會執行block大括號里的代碼段2.有參數,無返回值
函數指針 void (*p)(int,int)=nil; // block void (^block)(int,int)=^(int a,int b){ int max = a>b?a:b; NSLog(@"%d",max);}; // 調用 先有block 才能對block進行調用 block(10,2); // void(^)(int,int)是block的類型,它的名是block,我們也通過名進行各種調用 void (^block)(NSString *)=^(NSString *str){ NSLog(@"%@",str); }; block(@"nihao");參數是一個數組,對數組進行遍歷
void(^block)(NSArray *)=^(NSArray *arr){ for (NSString *temp in arr) { NSLog(@"%@",temp); } }; block(@[@"1",@"2"]);3.有返回值,無參數
// 有返回值在函數段的最后要加上return int (^block)()=^(){ // 這里默認100 是long型 return 100;}; // block調用時即使沒有參數()也得加上 NSLog(@"%d",block()); // 類型不同的時候需要轉換 NSInteger (^block)()=^(){ return (NSInteger)100; };4.有返回值,有參數
NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSInteger index){ return arr[index]; }; NSLog(@"%@",block(@[@"1",@"2"],0));練習
寫一個返回值為整型,參數為NSString ,(僅一個參數)的block,實現將字符串轉換為整型的功能 NSInteger (^block)(NSString *)=^(NSString * str) { // 返回整型,參數為字符串 return [str integerValue];// 屬性,也可以用點語法 }; NSLog(@"%ld",block(@"1234567")); // NSInteger 為返回值的類型,NSString 為參數的類型 參數日期的字符串,返回NSDate類型的日期對象 NSDate *(^block)(NSString *)=^(NSString *str) { NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; return [formatter dateFromString:str]; }; NSString *str=@"2015-7-23 17:18:10"; NSLog(@"%@",block(str));block函數段更多使用參數,而返回值更多的是調用一方使用
對函數指針進行typedef
xx.m typedef int (*PFUN)(int ,int ); main.m PFUN p=addNum; NSLog(@"%d",p(10,20));對block進行typedef
block所對應的類型 typedef NSString *(^Block) (NSArray *); // 通過新的block寫一個block Block block =^(NSArray *arr){ return arr[0]; }; // 有返回值,無參數 typedef NSInteger (^Block1)();block和局部變量
// 無返回值無參數 // __block相當于給a一個在block中修改的權限,否則它只能取值,不能賦值,但是全局變量可以 __block int a =10; void(^block)()=^()// 沒有參數的話不寫括號也可以 括號中寫void也可以 { int b=10*a; NSLog(@"%d",b); }; block();通過block對數組進行遍歷
// 使用系統的方法 NSArray *arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil]; // 用系統的block [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@",obj); }]; // id obj:NSString *obj // 系統的block的用法就是回車數組排序
// 數組對字符串的排序 NSArray *arr=@[@"zhangyangyang",@"wuhe",@"liushanshan",@"yanglin",@"wangjunmin"]; //SEL是方法選擇器,它是方法選擇器的類型 NSArray *newArr=[arr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@",newArr); NSLog(@"%@",arr);可變數組
NSMutableArray *arr=[NSMutableArray arrayWithObjects:@"zhangyangyang",@"wuhe",@"liushanshan",@"yanglin",@"wangjunmin", nil]; [arr sortUsingSelector:@selector(compare:)]; NSLog(@"%@",arr);對對象進行排序
Person *per1=[Person baseWithName:@"yanglin" sex:@"nan"]; Person *per2=[Person baseWithName:@"wuhe" sex:@"nan"]; Person *per3=[Person baseWithName:@"cuimou" sex:@"nv"]; Person *per4=[Person baseWithName:@"shangshuai" sex:@"nan"]; NSArray *arr=@[per1,per2,per3,per4];// 以學生的姓名作為排序的依據 NSArray *newArr=[arr sortedArrayUsingComparator:^NSComparisonResult(Person * obj1, Person * obj2) { return [obj1.name compare:obj2.name]; }]; for (Person *per in newArr) { NSLog(@"%@",per.name); } NSMutableArray *mArr=[NSMutableArray arrayWithObjects:per1,per2,per3,per4, nil]; [mArr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { Person *per1=(Person *)obj1; Person *per2=(Person *)obj2; return [per1.name compare:per2.name]; }]; for (Person *per in mArr) { NSLog(@"%@",per.name); }總結
以上是生活随笔為你收集整理的OC10-Block的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字SOC设计之低功耗之线性稳压器(LD
- 下一篇: OPPO A37 A37m怎么刷机 OP