OC10 -- block / 多态
生活随笔
收集整理的這篇文章主要介紹了
OC10 -- block / 多态
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
block 的四種形式
//1. 無參數無返回值void (^block1)() = ^(){NSLog(@"好煩哦");};//block 的使用:block1();//block自己不會執行,必須調用才會執行block大括號中的代碼段.// 2. 有參數無返回值.// void (*p)(int , int) = NULL; (函數指針寫法)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,我們也通過名進行調用.// 參數是字符串:void (^block2)(NSString *) = ^(NSString *str){ NSLog(@"%@",str);};block2(@"哈哈");// 參數是一個數組,對數組進行遍歷void (^block2)(NSArray *) = ^(NSArray *arr){for (NSArray *a in arr) {NSLog(@"%@",a);}};NSArray *arr = @[@"1",@"2"];block2(arr);block2(@[@"3",@"6"]);// 3. 有返回值,無參數int (^block3)() = ^(){return 100;};// block調用時沒有參數也要加上括號.NSLog(@"%d",block3());//4. 有參數,有返回值NSString * (^block4)(NSArray *, NSInteger) = ^(NSArray *arr , NSInteger index){return [arr objectAtIndex:index];};// 給入字符串,返回整型:NSInteger (^block4)(NSString *) = ^(NSString *str){return str.integerValue;};NSLog(@"%ld",block4(@"222"));// 參數日期字符串,返回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的函數段中更多使用參數,而返回值是誰調用誰使用.typedef
#import <Foundation/Foundation.h> //函數指針的typedef: //新的類型名寫在*之后 typedef int(*PFUN)(int, int);// block的typedef: typedef NSString *(^Block)(NSArray *) ;//練習.有返回值,無參數 typedef NSInteger(^BB)() ;int main(int argc, const char * argv[]) {//通過新的block寫一個blockBlock block = ^(NSArray *arr){return arr[0];};return 0; }block和局部變量
// __block相當于a一個在block中修改的權限,否則他只能取值,不能賦值.__block int a = 10;void (^block)() = ^{a = 10 * a; // 若不寫__block就不能用a承接結果.NSLog(@"%d",a);};block();系統的block
//通過block對數組進行遍歷NSArray *arr= [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];// 系統block,用法就是回車.[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {NSLog(@"%@",obj);}];數組排序
數組對字符串的排序
//不可變數組NSArray *arr = @[@"zhangjian",@"yanglin",@"liujian"];//SEL -- 方法選擇器,他是方法選擇器的類型.NSArray *arrnew = [arr sortedArrayUsingSelector:@selector(compare:)];NSLog(@"%@",arrnew);NSLog(@"%@",arr);//可變數組NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"zhangjian",@"yanglin",@"liujian", nil];[arr sortUsingSelector:@selector(compare:)];NSLog(@"%@",arr);數組對對象進行排序
// 新建四個人的對象Person *per1 = [Person baseWithName:@"liujia" sex:@"nan"];Person *per2 = [Person baseWithName:@"wangjian" sex:@"nan"];Person *per3 = [Person baseWithName:@"heshuang" sex:@"nv"];//不可變數組// 用字面量創建對象和便利構造器創建是一樣的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 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);};多態
創建一個BaseModel的類.
BaseModel.h 文件
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{//用多態的方式完成對這個對象的創建.id obj = [[[self class] alloc] initWithName:name sex:sex];return obj; } @end在創建一個Student 類, 繼承于BaseModel
main.m 文件
直接可以調用baseWithName方法創建對象.
總結
以上是生活随笔為你收集整理的OC10 -- block / 多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简明 s3cmd 安装与使用手册
- 下一篇: JPO Summary