#import <Foundation/Foundation.h>
#import "Person.h"
int number2=9;
/*
int sum(int num1,int num2);
int sum(int num1,int num2){
int sum=0;
sum=num1+num2;
return sum;
}
//函数指针
int (*temp)(int ,int );
//取别名
typedef int (*temp_sum)(int,int);
*/
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
int a=3,b=5;
int result=sum(a, b);
printf("result=%d\n",result);
temp=sum;
temp(a,b);
//定义一个函数指针变量
temp_sum p_sum=sum;
p_sum(a,5);
*/
#pragma mark ----- Block ---------
//Block ^拖字符 标志后面的变量是Block变量
//跟函数指针特别像
//返回值类型 (^变量名)(参数列表)=^返回值类型(参数列表){函数体};
int (^MyBlock)(int num1,int num2)=^int(int num1,int num2){
//这里的函数体跟之前的函数调用机理一样,只有当被调用的时候,这里的函数体才会被执行。
return num1+num2;
};
int sum=MyBlock(3,5);
NSLog(@"sum=%d",sum);
void (^MyBlock1)(int,int)=^(int num1,int num2){
// int sum=num1+num2;
printf("%d\n",num1+num2);
};
MyBlock1(3,8);
BOOL (^BlockBOOL)(float,float)=^(float a,float b){
BOOL r= a>b?YES:NO;
return r;
};
NSLog(@"返回结果:%d",BlockBOOL(1.2,3.4));
float (^BlockFloat)(float,float)=^(float a,float b){
float sum=a+b;
return sum;
};
NSLog(@"返回结果:%.2f",BlockFloat(1.2,3.4));
#pragma mark ------- 给block 取别名---------
//MaxNumber就代表一个类型
typedef int (^TwoNumberOperation)(int,int);
//定义一个MaxNumber类型的变量,变量指向Max这个block
TwoNumberOperation maxNumber=Max;
//相当于指针的重指向
// maxNumber=MyBlock;
NSLog(@"maxNumber=%d",maxNumber(9,1));
//
NSArray *arr = @[@"w",@"e",@"t"];
//默认升序
NSArray *arr1=[arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
NSLog(@"%@",arr1);
// NSComparator
//倒序
NSArray *arr2=[arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj2 compare:obj1];
}];
NSLog(@"%@",arr2);
//求乘积
int (^BlockMulti)(int,int)=^(int a,int b){
return a*b;
};
int multi=BlockMulti(12,3);
NSLog(@"12*3=%d",multi);
//根据别名 定义一个变量 指向你想运行的那个Block块。
TwoNumberOperation Multi=BlockMulti;
int result1=Multi(29,2);
NSLog(@"29*2=%d",result1);
//使用嵌套--得到三个数中的最大值
int (^BlockMaxOfThreeNumber)(int ,int ,int)=^ (int a,int b,int c){
//嵌套调用前面一个block
maxNumber(a,b);
return maxNumber(a,b)>c?maxNumber(a,b):c;
};
int num1=23,num2=12,num3=25;
NSLog(@"%d,%d,%d中的最大数:%d",num1,num2,num3,BlockMaxOfThreeNumber(num1,num2,num3));
// block能存在全局区、栈区、堆区
#pragma mark ------ Block 与局部变量|全局变量-------------
int number1=5;
__block int number11=7;//为了防止外部局部变量被释放后,block块内在对这个变量进行修改时发生奔溃的情况。
//两个下划线+block
// __block是相当于拷贝了一个number,就相当于在外部局部变量number处也有另外一个__block的number,所以当在还没有调用block时,外部释放了number后,再在block中对number访问以及修改都是可以的。个人觉得就相当于使用了两个重名的名字,当一个名字被弃用了,另外一个名字也是可以的。
//无返回值无参数
void (^numberBlock)()=^(){
//对于block块外的局部变量,block内部可以访问,但是不能修改。
//在block里面只能访问局部变量,不能进行修改值。
number11++;
NSLog(@"%d",number1);
NSLog(@"block块内使用number11:%d",number11);
};
numberBlock();
NSLog(@"调用了block后number11:%d",number11);
#pragma mark 排序
// NSComparisonResult
NSMutableArray *array1=[NSMutableArray array];
[array1 addObject:@"11"];
[array1 addObject:@"34"];
[array1 addObject:@"9"];
[array1 addObject:@"19"];
[array1 addObject:@"89"];
NSComparisonResult (^Aray)(id,id)=^(NSString *str1,NSString *str2){
// if ([str1 compare:str2]==NSOrderedAscending) {
// return NSOrderedAscending;
// }else if ([str1 compare:str2]==NSOrderedDescending){
// return NSOrderedDescending;
// }else{
// return NSOrderedSame;
// }
return [str1 compare:str2];
};
Aray([array1 objectAtIndex:1],[array1 objectAtIndex:4]);
NSLog(@"%@",array1);
// NSArray *array2=[array1 sortedArrayUsingComparator:^Aray(NSString *str1,NSString *str2) {
// return [obj1 compare:obj2];
// }];
//
// NSLog(@"%@",array2);
Person *person1=[Person personName:@"bella" Gender:@"female" Age:22];
Person *person2=[Person personName:@"jack" Gender:@"male" Age:23];
Person *person3=[Person personName:@"jude" Gender:@"male" Age:34];
Person *person4=[Person personName:@"jessca" Gender:@"female" Age:26];
Person *person5=[Person personName:@"poppy" Gender:@"female" Age:6];
[person1 setName:@"tiantian" Gender:@"female" Age:8];
NSLog(@"person1:%@",person1);
NSLog(@"person2:%@",person2);
NSMutableArray *personArray=[[NSMutableArray alloc]initWithObjects:person1,person2,person3,person4,person5, nil];
//根据名字排序--倒序
[personArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return -[[obj1 name] compare:[obj2 name]];
}];
NSLog(@"姓名排序:%@",personArray);
//根据年龄排序
[personArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//我也是够了,明明自己定义的age是NSInteger的,结果刚刚却想成了NSString*,真是太傻太天真,自以为还非得转换成NSNuber才能比较,我真的是够够的了。
NSNumber *num1=[[NSNumber alloc]initWithInteger:[obj1 age]];
NSNumber *num2=[[NSNumber alloc]initWithInteger:[obj2 age]];
//compare
//- (NSComparisonResult)compare:(NSNumber *)otherNumber;
return [num1 compare:num2];
}];
NSLog(@"年龄排序:%@",personArray);
#pragma mark ---------字面量 ——-------------------
//字符串字面量
NSString *str1=@"hello girl";
NSLog(@"%@",str1);
//NSNumber中的字面量
NSNumber *numberA=@10;//整型
NSLog(@"%@",numberA);
NSNumber *numberB=@3.14159f;
NSLog(@"%@",numberB);
//BOOL
NSNumber *numberC=@YES;
NSLog(@"%@",numberC);
//字符
NSNumber *numberD=@'a';
NSLog(@"%@",numberD);
//无符号整型
NSNumber *numberE=@123ul;
NSLog(@"%@",numberE);
//数组
NSArray *numberF=@[@1,@3,@13];
NSLog(@"%@",numberF);
NSDictionary *numberG=@{@7:@'h',@4:@'g'};
NSLog(@"%@",numberG);
}
return 0;
}
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_name;
NSString *_gender;
NSInteger _age;
}
-(id)initWithName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age;
+(id)personName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age;
-(void)setName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age;
-(id)name;
-(id)gender;
-(NSInteger)age;
-(NSString *)description;
@end
==================================================================
#import "Person.h"
@implementation Person
-(id)initWithName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age{
self=[super init];
if (self) {
_name=name;
_gender=gender;
_age=age;
}
return self;
}
+(id)personName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age{
Person *person=[[Person alloc]initWithName:name Gender:gender Age:age];
return person;
}
-(void)setName:(NSString*)name Gender:(NSString*)gender Age:(NSInteger)age{
_name=name;
_gender=gender;
_age=age;
}
-(id)name{
return _name;
}
-(id)gender{
return _gender;
}
-(NSInteger)age{
return _age;
}
-(NSString *)description{
return [NSString stringWithFormat:@"%@,%@,%ld",_name,_gender,_age];
}
@end