星空网 > 软件开发 > 操作系统

ObjC中怎么判断可变和不可变

ObjC中怎么判断可变和不可变

  怎么判断NSString和NSMutableString呢?

  请听题

  BOOL result = [@"123" isKindOfClass:[NSMutableString class]];  // A:YES   B:NO

  这很简单当然选B的,字符串常量是NSString。所以正确答案是A,是不是有种高考题的赶脚。建议这题出面试。

  首先应该百度objc的类簇概念,然后是工厂模式。这篇笔记只讲怎么判断,开个传送门自己去打怪。

 

  看控制台弄出来的结果

  id str0 = [NSString alloc];//NSPlaceholderString->NSString  id str1 = [[NSString alloc] init];//__NSCFConstantString->__NSCFString->NSMutableString->NSString  id str3 = [NSString stringWithFormat:@"123"];//NSTaggedPointerString->NSString  id str4 = [NSMutableString alloc];//NSPlaceholderMutableString->NSMutableString->NSString  id str5 = [NSMutableString new];//__NSCFString->NSMutableString->NSString

  字符串常量,也就是str1那种创建方式得到的类型是__NSCFConstantString并且明目张胆的是NSMutableString的子类。无论如何请勇敢的质疑苹果脑残的设计。并且后面的Array和Dictionary就不存在这种脑残的地方。我们无法知道到底黑盒子里有多少这种子类,根据倒推**:

  所以现在判断一个字符串是可变的这么写就行了

BOOL isMutable = [str isMemberOfClass:NSClassFromString(@"__NSCFString")];//请注意是isMemberOfClass:这个方法不要用成isKindOfClass:

 

  把Array的控制台结果也弄出来简单的看一下

  NSArray* arr0 =        [[NSArray alloc] init];//__NSArray0->NSArray  NSArray* arr1 =        [NSArray arrayWithObject:@"123"];//__NSArrayI->NSArray  NSMutableArray* arr3 =   [[NSMutableArray alloc] init];//__NSArrayM->NSMutableArray->NSArray

  可以发现虽然NSArray也子嗣众多,但不会出现String那种近亲乱的情况。

  判断Array是不可变的这么写就行了,不需要写字符串的类型

BOOL notMutable = [arr isKindOfClass:[NSArray class]]&&![arr isKindOfClass:[NSMutableArray class]];

  Dictionary的情况同NSArray。

  转注出:原文




原标题:ObjC中怎么判断可变和不可变

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

手工制品卖家该进军Etsy,还是投资Shopify独立站?:https://www.ikjzd.com/articles/117037
Shopee新品上架丨哪些是不可触碰到的“致命细节”?:https://www.ikjzd.com/articles/117038
分析|2020年Amazon热卖的三大利基品类:https://www.ikjzd.com/articles/117039
汇总|三月开始实施的外贸新规:https://www.ikjzd.com/articles/117040
特朗普慌了!刚刚,美国多个州正式宣布...:https://www.ikjzd.com/articles/117041
“老大,快断货啦!”疫情影响下无法补货对我们的影响到底有多大?:https://www.ikjzd.com/articles/117042
跨境支付百科——巴西支付篇:https://www.kjdsnews.com/a/1836648.html
大福地快捷酒店预订 大福酒店怎么走:https://www.vstour.cn/a/365187.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流