iOS中NSNumber,NSValue,NSDate和反射

时间:2022-11-17 08:12:40
//
// main.m
// NSNumberTest
//
// Created by Unisk on 13-9-19.
// Copyright (c) 2013年 Test. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
#import "Person.h"

#pragma mark NSNumber相关
void nsnumerTest(){
NSNumber *number=[NSNumber numberWithInt:11];
NSMutableArray *array=[NSMutableArray array];
[array addObject:number];
// NSLog(@"%@",array);
// NSNumber *number1=[array lastObject];
NSNumber *number1=array[0];
// NSLog(@"%@",number1);s
int num=[number1 intValue];
NSLog(@"%i",num);
}

#pragma mark NSValue 用法
void nsvaule(){
CGPoint point=CGPointMake(11, 12);
NSValue *value=[NSValue valueWithPoint:point];
NSMutableArray *array=[NSMutableArray array];
[array addObject:value];
NSValue *nsVault=[array lastObject];
CGPoint point1=[nsVault pointValue];
BOOL result= CGPointEqualToPoint(point, point1);
NSLog(@"%i",result);

}

typedef struct {
int year;
int month;
int day;
} Date;

#pragma mark 结构体相关
void value(){
Date date={2013,9,18};
// 根据结构体类型生成对应的类型描述字符串
char *type=@encode(Date);
NSValue *value=[NSValue value:&date withObjCType:type];

Date date1;
// 取出包装好的结构体
[value getValue:&date1];
NSLog(@"year=%i,month=%i,day=%i",date1.year,date1.month,date1.day);

}

#pragma mark NSDate
void nsDate(){
NSDate *date=[NSDate date];
// NSLog(@"%@",date);
// [NSDate distantFuture]; 将来的某个时间
// [NSDate distantPast]; 过去的某个时间


// 返回1970-1-1 到现在的秒数
// NSTimeInterval interval=[date timeIntervalSince1970];
// NSLog(@"%.0f",interval);

// NSDate *date1=[NSDate date];
// [date earlierDate:date1];
// [date laterDate:date1];

NSDateFormatter *formater=[[[NSDateFormatter alloc] init]autorelease];
formater.dateFormat=@"yyyy-MM-dd hh:mm:ss";
NSString *string=[formater stringFromDate:date];
NSLog(@"%@",string);

}

#pragma mark 相关
void classTest(){
Student *stu=[[[Student alloc] init]autorelease];

//isKindOfClass 判断对象是否属于某个类,或者子类
if ([stu isKindOfClass:[Person class]]) {
NSLog(@"是的");
}
//isMemberOfClass 判断某个类是否属于某个类,不包含子类
if ([stu isMemberOfClass:[Student class]]) {
NSLog(@"不是");
}

//直接调用
// [stu test];
//间接调用
[stu performSelector:@selector(test)];

}

#pragma mark 反射相关
void reflect(){
NSString *str=@"Person";
//将字符串转换为class类
Class class=NSClassFromString(str);
//实例化对象
Person *person=[[[class alloc] init] autorelease];
NSLog(@"%@",person);

//将类转换为string
// NSString *str=NSStringFromClass([Person class]);
// NSLog(@"%@",str);

//方法的反射
NSString *method=@"test";
// 根据字符串得到方法
SEL selector=NSSelectorFromString(method);
[person performSelector:selector];

}


int main(int argc, const char * argv[])
{
@autoreleasepool {
reflect();
}
return 0;
}

#import <Foundation/Foundation.h>

@interface Person : NSObject

-(void)test;

@end

#import "Person.h"
@implementation Person

-(void)test{
NSLog(@"test 被调用了");
}

@end

#import "Person.h"
@interface Student : Person

-(void)test:(NSString *) string;

@end

#import "Student.h"
@implementation Student

-(void)test:(NSString *)string{
NSLog(@"test %@被调用了",string);
}

@end