标签:
对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。
判断对象类型
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例
-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例
实例一:
Person *person = [[Person alloc] init]; //父类
Teacher *teacher = [[Teacher alloc] init]; //子类
//YES
if ([teacher isMemberOfClass:[Teacher class]]) {
NSLog(@"teacher Teacher类的成员");
}
//NO
if ([teacher isMemberOfClass:[Person class]]) {
NSLog(@"teacher Person类的成员");
}
//NO
if ([teacher isMemberOfClass:[NSObject class]]) {
NSLog(@"teacher NSObject类的成员");
}
实例二:
Person *person = [[Person alloc] init];
Teacher *teacher = [[Teacher alloc] init];
//YES
if ([teacher isKindOfClass:[Teacher class]]) {
NSLog(@"teacher 是 Teacher类或Teacher的子类");
}
//YES
if ([teacher isKindOfClass:[Person class]]) {
NSLog(@"teacher 是 Person类或Person的子类");
}
//YES
if ([teacher isKindOfClass:[NSObject class]]) {
NSLog(@"teacher 是 NSObject类或NSObject的子类");
}
isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管,所以isMemberOfClass指到父类时才会为NO;
对方法进行判断:
-(BOOL) respondsToSelector: selector 判读实例是否有这样方法
+(BOOL) instancesRespondToSelector: 判断类是否有这个方法。此方法是类方法,不能用在类的对象
实例三:
// YES teacher是对象
if ( [teacher respondsToSelector: @selector( setName: )] == YES ) {
NSLog(@"teacher responds to setSize: method" );
}
// YES Teacher是类
if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) {
NSLog(@"Teacher instance responds to teach method");
}
2:IOS 开发中判断字符串是否为空字符的方法
- (BOOL) isBlankString:(NSString *)string {
if (string == nil || string == NULL) {
return YES;
}
if ([string isKindOfClass:[NSNull class]]) {
return YES;
}
if ([[string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length]==0) {
return YES;
}
return NO;
}
3:删除Caches文件夹的内容
// 文件管理者 NSFileManager *mgr = [NSFileManager defaultManager]; // 缓存路径 NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; [mgr removeItemAtPath:caches error:nil];
4:计算某个文件夹或文件的大小
/**
* @ 15-06-17 09:06:22
*
* @brief 计算文件或文件夹的大小 因为osx 文件夹是没有大小这个属性 要通过各个文件计算得到 subpathsAtPath可以获得文件夹下面所有的文件 包含子文件夹里面
* @param filePath 比如缓存caches的路径
* @return 大小
*/
- (NSInteger)fileSize:(NSString *)filePath
{
NSFileManager *mgr = [NSFileManager defaultManager];
// 判断是否为文件
BOOL dir = NO;
BOOL exists = [mgr fileExistsAtPath:filePath isDirectory:&dir];
// 文件\文件夹不存在
if (exists == NO) return 0;
if (dir) { // self是一个文件夹
// 遍历caches里面的所有内容 --- 直接和间接内容
NSArray *subpaths = [mgr subpathsAtPath:filePath];
NSInteger totalByteSize = 0;
for (NSString *subpath in subpaths) {
// 获得全路径
NSString *fullSubpath = [filePath stringByAppendingPathComponent:subpath];
// 判断是否为文件
BOOL dir = NO;
[mgr fileExistsAtPath:fullSubpath isDirectory:&dir];
if (dir == NO) { // 文件
totalByteSize += [[mgr attributesOfItemAtPath:fullSubpath error:nil][NSFileSize] integerValue];
}
}
return totalByteSize;
} else { // 是一个文件
return [[mgr attributesOfItemAtPath:filePath error:nil][NSFileSize] integerValue];
}
}
调用传入下面的路径:
NSFileManager *mgr = [NSFileManager defaultManager];
// 缓存路径
NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
标签:
原文地址:http://blog.csdn.net/u010742414/article/details/47131845