OC10-Block
生活随笔
收集整理的這篇文章主要介紹了
OC10-Block
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
棧區(qū)
int a = 10; NSLog(@"%p",&a);堆區(qū)
int *p=malloc(40); NSLog(@"%p",p);全局靜態(tài)區(qū)
static int b = 10; NSLog(@"%p", &b);常量區(qū)
常量字符串
char *str="iPhone"; NSLog(@"%p",str);代碼區(qū)
xx.m int addNum(int a,int b){return a+b; } main.m NSLog(@"%p",maxValue);函數(shù)指針的類型
NSInteger (*)(NSInteger ,NSInteger ); NSInteger ( *pointer)(NSInteger ,NSInteger)=maxValue; NSLog(@"%p",pointer);拿函數(shù)名進(jìn)行調(diào)用
NSLog(@"%ld",maxValue(10, 5));拿函數(shù)指針進(jìn)行調(diào)用
NSLog(@"%ld",pointer(10,5));四種形式的block
1.無參數(shù),無返回值
void (^block)()= ^(){ NSLog(@"多云"); }; // 直接用block()調(diào)用 block(); // block自己不會執(zhí)行,必須調(diào)用才會執(zhí)行block大括號里的代碼段2.有參數(shù),無返回值
函數(shù)指針 void (*p)(int,int)=nil; // block void (^block)(int,int)=^(int a,int b){ int max = a>b?a:b; NSLog(@"%d",max);}; // 調(diào)用 先有block 才能對block進(jìn)行調(diào)用 block(10,2); // void(^)(int,int)是block的類型,它的名是block,我們也通過名進(jìn)行各種調(diào)用 void (^block)(NSString *)=^(NSString *str){ NSLog(@"%@",str); }; block(@"nihao");參數(shù)是一個數(shù)組,對數(shù)組進(jìn)行遍歷
void(^block)(NSArray *)=^(NSArray *arr){ for (NSString *temp in arr) { NSLog(@"%@",temp); } }; block(@[@"1",@"2"]);3.有返回值,無參數(shù)
// 有返回值在函數(shù)段的最后要加上return int (^block)()=^(){ // 這里默認(rèn)100 是long型 return 100;}; // block調(diào)用時(shí)即使沒有參數(shù)()也得加上 NSLog(@"%d",block()); // 類型不同的時(shí)候需要轉(zhuǎn)換 NSInteger (^block)()=^(){ return (NSInteger)100; };4.有返回值,有參數(shù)
NSString *(^block)(NSArray *,NSInteger)=^(NSArray *arr,NSInteger index){ return arr[index]; }; NSLog(@"%@",block(@[@"1",@"2"],0));練習(xí)
寫一個返回值為整型,參數(shù)為NSString ,(僅一個參數(shù))的block,實(shí)現(xiàn)將字符串轉(zhuǎn)換為整型的功能 NSInteger (^block)(NSString *)=^(NSString * str) { // 返回整型,參數(shù)為字符串 return [str integerValue];// 屬性,也可以用點(diǎn)語法 }; NSLog(@"%ld",block(@"1234567")); // NSInteger 為返回值的類型,NSString 為參數(shù)的類型 參數(shù)日期的字符串,返回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函數(shù)段更多使用參數(shù),而返回值更多的是調(diào)用一方使用
對函數(shù)指針進(jìn)行typedef
xx.m typedef int (*PFUN)(int ,int ); main.m PFUN p=addNum; NSLog(@"%d",p(10,20));對block進(jìn)行typedef
block所對應(yīng)的類型 typedef NSString *(^Block) (NSArray *); // 通過新的block寫一個block Block block =^(NSArray *arr){ return arr[0]; }; // 有返回值,無參數(shù) typedef NSInteger (^Block1)();block和局部變量
// 無返回值無參數(shù) // __block相當(dāng)于給a一個在block中修改的權(quán)限,否則它只能取值,不能賦值,但是全局變量可以 __block int a =10; void(^block)()=^()// 沒有參數(shù)的話不寫括號也可以 括號中寫void也可以 { int b=10*a; NSLog(@"%d",b); }; block();通過block對數(shù)組進(jìn)行遍歷
// 使用系統(tǒng)的方法 NSArray *arr=[NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil]; // 用系統(tǒng)的block [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%@",obj); }]; // id obj:NSString *obj // 系統(tǒng)的block的用法就是回車數(shù)組排序
// 數(shù)組對字符串的排序 NSArray *arr=@[@"zhangyangyang",@"wuhe",@"liushanshan",@"yanglin",@"wangjunmin"]; //SEL是方法選擇器,它是方法選擇器的類型 NSArray *newArr=[arr sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"%@",newArr); NSLog(@"%@",arr);可變數(shù)組
NSMutableArray *arr=[NSMutableArray arrayWithObjects:@"zhangyangyang",@"wuhe",@"liushanshan",@"yanglin",@"wangjunmin", nil]; [arr sortUsingSelector:@selector(compare:)]; NSLog(@"%@",arr);對對象進(jìn)行排序
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];// 以學(xué)生的姓名作為排序的依據(jù) 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); }總結(jié)
以上是生活随笔為你收集整理的OC10-Block的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数字SOC设计之低功耗之线性稳压器(LD
- 下一篇: Android常用控件-01