IOS--開發基礎知識
對象在運行時擷取其類型的能力稱為內省。內省可以有多種方法實現。判斷物件類型-(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];