您的位置:首页 > 移动开发 > Objective-C

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

2017-08-23 16:42 501 查看

第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
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息