对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(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];
时间: 2024-09-29 00:10:07