一:
//
// main.m
#import
#import "Student.h"
//函数声明
int maxValue (int a, int b);
//函数定义
int maxValue (int a, int b){
return a > b ? a : b ;
}
//函数指针类型
//int (*)(int, int);
//函数指针变量
int (*aaa)(int, int) = NULL;
//重命名数据类型
typedefint (*AAA) (int, int);
//函数指针变量;i
AAA aa = NULL;
int main(int argc, const char * argv[]) {
//函数调用
int max = maxValue(1, 5);
printf("%d\n", max);
//函数指针变量指向函数的首地址
aa = maxValue;
int max1 = aa(6,3);//回调函数
printf("%d",max1);
//block, 块语法, 实质是匿名函数,是对C语言中函数的扩展
//块语法有时也被称为闭包
//block实际上是由C语言实现的, 所以其执行效率很高
//block的语法借鉴了函数指针的语法
//block数据类型
//返回值函数 (^)(参数类型1 参数名1, 参数类型2 参数名2)
//注:1. 没有参数,括号不能省略
//2. 参数名可以省略, 特殊情况下为了使用方便, 不省略
//int (^)(int, int)
//定义一个block变量
int (^blockName)(int, int);
//注:变量名写在幂符号(^)的后面
//block的赋值(block实现)
//^(参数类型1 参数名1, 参数类型2 参数名2,...){
//执行代码
//}
//注:1.参数名不能够省略
//2.如果block有返回值类型, 需要使用return返回数据
blockName = ^(int a, int b){
return a > b ? a : b;
};
int (^blockName1)(int, int) = ^(int a, int b){
NSLog(@"求最大值");
return a > b ? a : b;
};
//block的使用(调用block)
//block名字(实参1, 实参2, ...)
NSLog(@"%d",blockName1(4, 9)) ;
//注: block定义时, block块中的代码不会执行, block调用时block块中的代码才会执行!
//定义一个block, 实现打印"Hello,world!"
void (^blockPrint)();
blockPrint = ^(){
NSLog(@"Hello,world!");
};
blockPrint();
//写一个返回值为整型参数为NSString (仅一个参数)的功能,现将字符串转换为整型的功能
int (^convert)( NSString *) = ^(NSString *str){
return [str intValue];
};
int a = convert(@"5我1爱2你3");
NSLog(@"%d",a );//5
//block的应用
//1.使用typedef重命名block类型
typedef int (^BlockType)(NSString *);
BlockType convert1 = ^(NSString *str){
return [str intValue];
};
int b = convert1(@"564545");
NSLog(@"%d",b);
//2.内部访问变量
//注: a.block内部可以访问局部变量,但是不能修改局部变量,想要修改全局变量, 需要在变量前加修饰符__block
//b.block可以访问并修改全局变量
__block int a1 = 10;
void (^print)()=^(){
NSLog(@"%d",a1);
a1++;
};
print();
print();
print();
print();
print();
//3.block作为方法的参数
NSArray *nameArray = [NSArrayarrayWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu", nil];
NSArray *sortArray = [nameArraysortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sortArray);
NSArray *numberArray= [NSArray arrayWithObjects:@"1",@"2",@"3",@"21",nil];
//只能排10以下
NSArray *sortArray1 = [numberArraysortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sortArray1);
//完善的排序
NSArray *sortArray2 = [numberArraysortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
//相邻两个元素(obj1,obj2)的比较规则
//系统排序以满足NSOrderedDescending的条件进行交换
//注: 快速判断排好的数组, 以满足NSOrderedAscending的条件为准
if ([obj1 intValue] < [obj2 intValue]) {
returnNSOrderedDescending;
}else if([obj1 intValue]==[obj2 intValue]){
return NSOrderedSame;
}else{
returnNSOrderedAscending;
}
}];
NSLog(@"%@",sortArray2);
// NSArray *floatArray = [NSArray arrayWithObjects:@"2.3", @"5.8",@"54.45",@"545.2", nil];
//使用block对数组进行降序排列
Student *student = [StudentstudentWithName:@"wsan"number:56score:15.23];
NSLog(@"%@",student.name);
NSLog(@"%@",[student description]);
Student *student1 = [Student studentWithName:@"esi" number:15score:45.2323];
Student *student2 = [Student studentWithName:@"awu" number:45score:51.323];
NSArray *stuArray = [[NSArray alloc]initWithObjects:student,student1,student2,nil];
//按照学号由高到底进行排序
NSArray *sortArray8 = [stuArraysortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student*obj2) {
//相邻两个元素(obj1,obj2)的比较规则
//系统排序以满足NSOrderedDescending的条件进行交换
//注: 快速判断排好的数组, 以满足NSOrderedAscending的条件为准
if (obj1.number < obj2.number ) {
returnNSOrderedDescending;
}else if(obj1.number ==obj2.number){
return NSOrderedSame;
}else{
returnNSOrderedAscending;
}
}];
for (Student *temp in sortArray8) {
NSLog(@"%@", temp);
}
//姓名从a-z
NSArray *sortArray9 = [stuArraysortedArrayUsingComparator:^NSComparisonResult(Student *obj1,Student *obj2) {
// if (obj1.name < obj2.name) {
// return NSOrderedDescending;
// }else if(obj1.name == obj2.name){
// return NSOrderedSame;
//
// }else{
// return NSOrderedAscending;
// }
return [obj1.name compare:obj2.name];
}];
for (Student *temp1 in sortArray9) {
NSLog(@"%@",temp1);
}
//
//语法糖
//100
NSNumber *n = [NSNumbernumberWithInteger:100];
NSNumber *n1 = @100;
NSString *string = [[NSString alloc]initWithString:@"123"];
NSString *string1 = @"123";
NSArray *arr = [NSArray arrayWithObjects:@"a",@"b", nil];
NSArray *arr1 = @[@"a", @"b",@"c"];
NSLog(@"%@",[arr1 objectAtIndex:2]);
NSLog(@"%@",arr1[2]);
NSDictionary *dic = [NSDictionarydictionaryWithObjectsAndKeys:@"111",@"1",@"2",@"222", nil];
NSDictionary *dic1 = @{@"1":@"111",@"2":@"222"};
NSLog(@"%@",[dic objectForKey:@"2"]);
NSLog(@"%@",dic[@"2"]);
return 0;
}
二:
//
// Student.h
#import
@interface Student : NSObject
//姓名, 学号, 分数
//遍历构造器, 自定义初始化方法
@property (nonatomic,retain)NSString *name;
@property NSInteger number;
@propertyCGFloat score;
- (id)initWithName:(NSString *)name number:(NSInteger)number score:(CGFloat)score;
+ (id)studentWithName:(NSString *)name number:(NSInteger)number score:(CGFloat)score;
//输出信息
- (void)sayHi;
@end
三:
//
// Student.m
#import "Student.h"
@implementation Student
- (id)initWithName:(NSString *)name number:(NSInteger)number score:(CGFloat)score{
if (self = [super init]) {
_name = name;
_number =number;
_score =score;
}
return self;
}
+ (id)studentWithName:(NSString *)name number:(NSInteger)number score:(CGFloat)score{
return [[Student alloc]initWithName:name number:numberscore:score];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"name:%@ number: %ld score:%.2lf", _name,_number,_score];
}
@end