<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: [objc] viewplaincopy"code" class="OC">    //  //  main.
[objc]  view plain copy
  1. "code" class="OC">  
  2.   
  3. //  
  4. //  main.m  
  5. //  Copyright (c) 2015年 tongxing. All rights reserved.  
  6. //  
  7.   
  8. #import   
  9. #import "Student.h"  
  10. typedef int(^BlockType)(int,int);  
  11. int globalVariable = 200;  
  12. int main(int argc, const charchar * argv[])  
  13. {  
  14.   
  15.     @autoreleasepool {  
  16.           
  17.           
  18.         //int (int a,int b)表示匿名函数的类型  
  19.         //int (^ )(int a,int b)表示Block的类型  
  20.         //myBlock实现的是匿名函数的实现体部分  
  21.         int (^ myBlock)(int a ,int b) =^int(int a ,int b){  
  22.             return a+b;  
  23.         };//这里需要加分号,因为这整个部分相当于一个赋值语句,大括号内容赋值给块变量myBlock  
  24.           
  25.         //按照调用函数的方式调用块对象  
  26.         int value =   myBlock(3,5);//通过myBlock实现两个整型数的求和,返回值为int  
  27.           
  28.         NSLog(@"%d",value);  
  29.           
  30.           
  31. //写⼀个 返回值为整型 参数为NSString(仅⼀一个参数)的block,实现将字符串转换为整型的功能.  
  32.         int (^strBlock)(NSString *str)=^int(NSString *str){  
  33.          
  34.         int value =[str intValue];  
  35.         return value;  
  36.               
  37.             };  
  38.         NSString *str = @"123";  
  39.         //使用block  
  40.         NSLog(@"%d",strBlock(str));  
  41.           
  42. //练习,定义三个block求商/差/积  
  43.         int (^cutBlock)(int ,int )=^int(int a,int b){  
  44.             return a-b;  
  45.           
  46.         };  
  47.         int (^dealerBlock)(int ,int)= ^(int a,int b){  
  48.             return  a%b;  
  49.         };  
  50.         int (^rideBlock)(int,int ) = ^(int a,int b){  
  51.             return a*b;  
  52.         };  
  53.         NSLog(@"%d",cutBlock(3,5));  
  54.         NSLog(@"%d", dealerBlock(3,5));  
  55.         NSLog(@"%d",rideBlock(3,5));  
  56.           
  57.        //对于上面三个函数的类型都一样,所以可以引入typedef来在#import下面进行重定义  
  58. #pragma mark----给相同block类型进行重命名  
  59.         BlockType myBlock1 = ^int(int a,int b){//对于^后面的int可以省略,但是系统默认的是int型,所以如果是其他类型一定要写上  
  60.             return a-b;  
  61.         };  
  62.         NSLog(@"%d",myBlock1(4,5));  
  63.         //.....  
  64.           
  65. #pragma mark----block与全局变量    
  66.     //定义一个全局变量globalVariable  
  67.         void (^block)(void) = ^(){//^(void)(),前面的返回值类型void可以省略,但是后面的括号语法上定义是不可以省略(),但是经过测试没有参数也可以省略  
  68.             globalVariable++;//如果是全局变量可以直接被访问和修改  
  69.             NSLog(@"%d",globalVariable);  
  70.         };  
  71.         block();  
  72.           
  73. #pragma mark----block与局部变量  
  74.        // int number =1;//局部变量需要加__block,否则会提示出错  
  75.       __block  int  number = 1;  
  76.         void (^block1)(void) = ^(){  
  77.             number++;//如果是局部变量不可以直接被访问和修改,必须在number前面加一个__block,这里需要打两个小_  
  78.             NSLog(@"%d",number);  
  79.         };  
  80.         block1();  
  81.           
  82. #pragma mark----block自动截取变量  
  83.         int val = 10;  
  84.         void (^blk)(void) = ^(){  
  85.            // printf("val=%d\n",val);  
  86.             NSLog(@"%d",val);  
  87.         };  
  88.         val = 2;  
  89.         blk();  
  90.           
  91. //上面这段代码,输出值是:val = 10.而不是2.block截获自动变量的瞬时值。因为block保存了自动变量的值,所以在执行block语法后,即使改写block中使用的自动变量的值也不会影响block执行时自动变量的值。  
  92.       
  93.           
  94. #pragma mark----block与数组排序  
  95.         //关于数组的排序已经总结过,这里做一个比较  
  96. //使用系统自带compare比较系统自带对象  
  97.         NSArray *strsArray =[NSArray arrayWithObjects:@"abc",@"cdf",@"ade",@"feg", nil nil];  
  98.         NSArray *newArray = [strsArray sortedArrayUsingSelector:@selector(compare:)];  
  99.         NSLog(@"%@",newArray);  
  100.           
  101. //使用block方式比较系统自带对象  
  102.         //该种方式是按block的语法按步骤来进行比较的,下面背注掉的是使用简便的方式,两者原理一样  
  103.         NSComparisonResult(^strBlock1)(id obj1,id obj2)=^NSComparisonResult(id obj1,id obj2){  
  104.             NSString *result1 = (NSString *)obj1;  
  105.             NSString *result2 = (NSString *)obj2;  
  106.             return [result1 compare:result2];  
  107.         };  
  108.         NSArray *resut3 = [strsArray sortedArrayUsingComparator:strBlock1];//strBlock1  
  109.         NSLog(@"%@--",resut3);  
  110.       
  111. //       NSArray *sortArray = [strsArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {^NSComparisonResult(id obj1, id obj2)相当于上面的strBlock1  
  112. //           NSString *result1 = (NSString *)obj1;  
  113. //           NSString *result2 = (NSString *)obj2;  
  114. //           return [result1 compare:result2];  
  115. //        }];  
  116. //        NSLog(@"%@",sortArray);  
  117.           
  118.           
  119.         //对于系统自带的对象和类都可以用compare方法,但是自定义的类需要自己重写compare方法  
  120.         //使用自定义compare方法对数组中得对象按照年龄进行排序,(数组中的对象为自定义类型的对象)  
  121.         Student *stu1 = [Student studentWithName:@"刘亦菲" Age:26 Score:89.0];  
  122.         Student *stu2 = [Student studentWithName:@"张飞" Age:34 Score:78.0];  
  123.         Student *stu3 = [Student studentWithName:@"周冬雨" Age:22 Score:85.0];  
  124.         NSMutableArray *stusarray = [NSMutableArray arrayWithObjects:stu1,stu2,stu3 , nil nil];  
  125.         [stusarray sortUsingSelector:@selector(studentCompare:)];  
  126.         for (NSString * str in stusarray) {  
  127.             NSLog(@"%@",str );  
  128.         }  
  129.           
  130. //使用block方式对数组中得对象按照年龄进行排序,(数组中的对象为自定义类型的对象)  
  131.         [stusarray sortUsingComparator:^NSComparisonResult(id obj1id obj2) {  
  132.             Student *stu1 = (Student *)obj1;//强制转换成自定义类型  
  133.             Student *stu2 = (Student *)obj2;  
  134.             return  [stu1 studentCompare:stu2];  
  135.               
  136.         }];  
  137.         for (NSString *stri in stusarray) {  
  138.             NSLog(@"%@",stri);  
  139.         }  
  140.           
  141.  //使用自定义的block实现对数组中的对象进行排序,基本处理方式与上述的处理系统对象相似,只是如果不知道参数类型必须进行强制转换  
  142.        NSComparisonResult(^stuBlock)(id ob1,id ob2) =^ NSComparisonResult(id ob1,id ob2){  
  143.         Student *stud1 = (Student *)ob1;//强制转换  
  144.         Student *stud2 = (Student *)ob2;  
  145.            return [stud1 studentCompare:stud2];  
  146.        };  
  147.         [stusarray sortUsingComparator:stuBlock];//调用自定义块  
  148.         for (NSString *stri in stusarray) {  
  149.             NSLog(@"%@",stri);  
  150.         }  
  151.        
  152.           
  153.           
  154.           
  155.           
  156.           
  157.           
  158.         }  
  159.     return 0;  
  160. }  
  161.   
  162.   
  163.   
  164.   
  165.   
  166.   
  167.   
  168.   
  169.   

自定义的Student类的.h文件和.m文件如下:

.h文件
//
//  Student.h

//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import 

@interface Student : NSObject
@property NSString *name;
@property int age;
@property float score;
//这里提前使用了OC中得属性
//关于属性的知识,后面将会给出相关学习,有兴趣的同学可以去博客园了解:http://www.cnblogs.com/wendingding/p/3706430.html

//{
//    NSString *_name;
//    int _age;
//    float _score;
//}
//-(void)setName:(NSString *)name;
//-(void)setAge:(int)age;
//-(void)setScore:(float)score;
//-(float)score;
//-(NSString *)name;
//-(int)age;
-(id)initWithName:(NSString *)name Age:(int)age Score:(float)score;
+(id)studentWithName:(NSString *)name Age:(int)age Score:(float)score;
//自定义比较方法
-(NSComparisonResult)studentCompare:(Student *)student;

@end

 

 

[objc]  view plain copy
  1. .m文件  
  2. //  
  3. //  Student.m  
  4. //  lesson6  
  5. //  
  6. //  Created by lanou3g on 15-4-7.  
  7. //  Copyright (c) 2015年 tongxing. All rights reserved.  
  8. //  
  9.   
  10. #import "Student.h"  
  11.   
  12. @implementation Student  
  13. //@synthesize _name ;  
  14. //@synthesize _age;  
  15. //@synthesize _score ;  
  16. //自从xcode 4.4后,@property就独揽了@property和@synthesize的功能。  
  17.   
  18.   
  19. //-(void)setName:(NSString *)name{  
  20. //    _name = name;  
  21. //}  
  22. //-(void)setAge:(int)age{  
  23. //    _age = age;  
  24. //}  
  25. //-(NSString *)name{  
  26. //    return _name;  
  27. //}  
  28. //-(int)age{  
  29. //   return  _age;  
  30. //}  
  31. //-(void)setScore:(float)score{  
  32. //    _score = score;  
  33. //}  
  34. //-(float)score{  
  35. //    return _score;  
  36. //}  
  37. -(id)initWithName:(NSString *)name Age:(int)age Score:(float)score{  
  38.     if (self = [super init]) {  
  39.         _name = name;  
  40.         _age = age;  
  41.         _score = score;  
  42.     }  
  43.     return self;  
  44. }  
  45. +(id)studentWithName:(NSString *)name Age:(int)age Score:(float)score{  
  46.     Student *student = [[Student alloc]initWithName:name Age:age Score:score];  
  47.     return student;  
  48.   
  49. }  
  50.   
  51. -(NSComparisonResult)studentCompare:(Student *)student{  
  52.     NSComparisonResult result1 = [[NSNumber numberWithInt:self.age] compare:[NSNumber numberWithInt:student.age]];  
  53.     return result1;  
  54.   
  55. }  
  56.   
  57. -(NSString *)description{  
  58.     return [NSString stringWithFormat:@"%@,%d",_name,_age];  
  59. }  
  60. @end  
  61.   
  62.    欢迎分享本文,转载请注明出处!

 

目录
相关文章
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1056 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
862 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
NoSuchObjectException(message:There is no database named cloudera_manager_metastore_canary_test_db_hive_hivemetastore_df61080e04cd7eb36c4336f71b5a8bc4) at org.
1082 0
|
Web App开发 前端开发 数据库
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
做大做强事实表,做小做弱维表; 分布式模式-维度建模新原则  (1)以值代键:针对键值唯一的维表,除非必要,否则不引入维表,如IP地址维表,采用IP作为维表的主键,事实表中存储IP值;      (2)合理分表:传统关系型数据仓库存在多表整合的冲动,如上图Event事实表,各种Acount Ind,Finance Ind等,用来扩展表的通用性,试图把所有的数据都存储到一张表 中。
788 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Spark Streaming 的一些问题,做选型前关注这些问题可以有效的降低使用风险。 checkpoint checkpoint 是个很好的恢复机制。
939 0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
关于reduce边join,其最重要的是使用MultipleInputs.addInputPath这个api对不同的表使用不同的Map,然后在每个Map里做一下该表的标识,最后到了Reduce端再根据标识区分对应的表! ...
788 0
|
Web App开发 前端开发 大数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
打算对新建的hadoop集群使用管理工具,列了以下主要的不同点: 主要的不同点 apache Ambari ClouderaManager Express(免费版) 配置版本控制和历史记录 支...
884 0