iOS之《Effective Objective-C 2.0》读书笔记(14)

来源:互联网 发布:matlab编程与工程应用 编辑:程序博客网 时间:2024/05/29 17:50

第14条:理解“类对象”的用意

1.用类型信息查询方法来检视类继承体系

  • isMemberOfClass: 能够判断出对象是否为某个特定类的实例
  • isKindOfClass: 则能够判断出对象是否为某类或其派生类的实例
NSMutableDictionary *dict = [NSMutableDictionary new];  [dict isMemberOfClass:[NSDictionary class]]; ///< NO [dict isMemberOfClass:[NSMutableDictionary class]]; ///< YES [dict isKindOfClass:[NSDictionary class]]; ///< YES [dict isKindOfClass:[NSArray class]]; ///< NO

2.类型信息查询方法的具体应用

  • 根据数组中存储的对象生成以逗号分隔的字符串,并将其存至文本文件
- (NSString*)commaSeparatedStringFromObjects:(NSArray*)array {      NSMutableString *string = [NSMutableStringnew];      for (id object in array) {          if ([object isKindOfClass:[NSStringclass]]) {              [string appendFormat:@"%@,", object];          } else if ([object isKindOfClass:[NSNumberclass]]) {              [string appendFormat:@"%d,", [object intValue]];          } else if ([object isKindOfClass:[NSDataclass]]) {              NSString *base64Encoded = /* base64 encoded data */;              [string appendFormat:@"%@,", base64Encoded];          } else {              // Type not supported          }      }      return string;  } 

3.不要直接比较类对象

  • 要使用==操作符,而不要使用比较Objective-C对象时常用的“isEqual:”方法(参见第8条)。原因在于,类对象是“单例”(singleton),在应用程序范围内,每个类的Class仅有一个实例。也就是说,另外一种可以精确判断出对象是否为某类实例的办法是:
id object = /* ... */;  if ([object class] == [EOCSomeClassclass]) {      // 'object' is an instance of EOCSomeClass  } 
阅读全文
0 0
原创粉丝点击