日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC10 -- block / 多态

發(fā)布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC10 -- block / 多态 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

block 的四種形式

//1. 無參數(shù)無返回值void (^block1)() = ^(){NSLog(@"好煩哦");};//block 的使用:block1();//block自己不會執(zhí)行,必須調(diào)用才會執(zhí)行block大括號中的代碼段.// 2. 有參數(shù)無返回值.// void (*p)(int , int) = NULL; (函數(shù)指針寫法)void (^block2)(int, int) = ^(int a , int b){int max = a > b ? a : b;NSLog(@"%d",max);};// 使用block2(20,10);// void (^)(int, int)是block的類型,它的名字是block,我們也通過名進(jìn)行調(diào)用.// 參數(shù)是字符串:void (^block2)(NSString *) = ^(NSString *str){ NSLog(@"%@",str);};block2(@"哈哈");// 參數(shù)是一個數(shù)組,對數(shù)組進(jìn)行遍歷void (^block2)(NSArray *) = ^(NSArray *arr){for (NSArray *a in arr) {NSLog(@"%@",a);}};NSArray *arr = @[@"1",@"2"];block2(arr);block2(@[@"3",@"6"]);// 3. 有返回值,無參數(shù)int (^block3)() = ^(){return 100;};// block調(diào)用時沒有參數(shù)也要加上括號.NSLog(@"%d",block3());//4. 有參數(shù),有返回值NSString * (^block4)(NSArray *, NSInteger) = ^(NSArray *arr , NSInteger index){return [arr objectAtIndex:index];};// 給入字符串,返回整型:NSInteger (^block4)(NSString *) = ^(NSString *str){return str.integerValue;};NSLog(@"%ld",block4(@"222"));// 參數(shù)日期字符串,返回NSdate:NSDate *(^block4)(NSString *) = ^(NSString *str){NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];return [formatter dateFromString:str];};NSLog(@"%@",block4(@"2015-08-12 19:00:00"));//block的函數(shù)段中更多使用參數(shù),而返回值是誰調(diào)用誰使用.

typedef

#import <Foundation/Foundation.h> //函數(shù)指針的typedef: //新的類型名寫在*之后 typedef int(*PFUN)(int, int);// block的typedef: typedef NSString *(^Block)(NSArray *) ;//練習(xí).有返回值,無參數(shù) typedef NSInteger(^BB)() ;int main(int argc, const char * argv[]) {//通過新的block寫一個blockBlock block = ^(NSArray *arr){return arr[0];};return 0; }

block和局部變量

// __block相當(dāng)于a一個在block中修改的權(quán)限,否則他只能取值,不能賦值.__block int a = 10;void (^block)() = ^{a = 10 * a; // 若不寫__block就不能用a承接結(jié)果.NSLog(@"%d",a);};block();

系統(tǒng)的block

//通過block對數(shù)組進(jìn)行遍歷NSArray *arr= [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];// 系統(tǒng)block,用法就是回車.[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {NSLog(@"%@",obj);}];

數(shù)組排序

數(shù)組對字符串的排序

//不可變數(shù)組NSArray *arr = @[@"zhangjian",@"yanglin",@"liujian"];//SEL -- 方法選擇器,他是方法選擇器的類型.NSArray *arrnew = [arr sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",arrnew);NSLog(@"%@",arr);//可變數(shù)組NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"zhangjian",@"yanglin",@"liujian", nil];[arr sortUsingSelector:@selector(compare:)];NSLog(@"%@",arr);

數(shù)組對對象進(jìn)行排序

// 新建四個人的對象Person *per1 = [Person baseWithName:@"liujia" sex:@"nan"];Person *per2 = [Person baseWithName:@"wangjian" sex:@"nan"];Person *per3 = [Person baseWithName:@"heshuang" sex:@"nv"];//不可變數(shù)組// 用字面量創(chuàng)建對象和便利構(gòu)造器創(chuàng)建是一樣的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);}//可變數(shù)組NSMutableArray *marr = [NSMutableArray arrayWithObjects:per1,per2,per3,per4, nil];[marr sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {Person *per11 = (Person *)obj1;Person *per22 = (Person *)obj2;return [per11.name compare:per22.name];}];for (Person *per in marr) {NSLog(@"%@",per.name);};

多態(tài)

創(chuàng)建一個BaseModel的類.
BaseModel.h 文件

#import <Foundation/Foundation.h>@interface BaseModel : NSObject@property(nonatomic, copy)NSString*name; @property(nonatomic, copy)NSString *sex;- (id)initWithName:(NSString *)name sex:(NSString *)sex;+ (id)baseWithName:(NSString *)name sex:(NSString *)sex;@end

BaseModel.m 文件

#import "BaseModel.h" @implementation BaseModel- (id)initWithName:(NSString *)name sex:(NSString *)sex{self = [super init];if (self) {self.name = name;self.sex = sex;}return self; }+ (id)baseWithName:(NSString *)name sex:(NSString *)sex{//用多態(tài)的方式完成對這個對象的創(chuàng)建.id obj = [[[self class] alloc] initWithName:name sex:sex];return obj; } @end

在創(chuàng)建一個Student 類, 繼承于BaseModel
main.m 文件

Person *per = [Person baseWithName:@"張賤" sex:@"男"];NSLog(@"%@",per.name);

直接可以調(diào)用baseWithName方法創(chuàng)建對象.

總結(jié)

以上是生活随笔為你收集整理的OC10 -- block / 多态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。