gpt4 book ai didi

iOS——区分 NSDictionary 和 NSMutableDictionary?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:59:58 26 4
gpt4 key购买 nike

我有以下代码片段:

NSString* value = @"value";
NSString* key = @"key";
NSMutableDictionary* foo = [NSMutableDictionary dictionary];
NSDictionary* bar = [NSDictionary dictionary];
NSAssert([bar isKindOfClass: [NSMutableDictionary class]], @""); // passes the assert as both are NSCFDictionary;
NSAssert([bar respondsToSelector: @selector(setValue:forKey:)], @""); // passes the assert because it NSCFDictionary does respond to the selector
[foo setValue:value forKey:key]; // no problem, foo is mutable
[bar setValue:value forKey:key]; // crash

因此,如果我有一个对象是 NSDictionaryNSMutableDictionary,缺少 try block (我宁愿避免),我怎么知道有区别吗?

最佳答案

老实说,如果没有 @try block ,您无法轻易区分。标准做法如下:

  • 如果您想检查它是否可变,以避免有人向您传递一个意外可变的对象,然后从您的下方将其变异,请复制字典。如果它真的不可变,框架会将其优化为 retain。如果它真的可变的,那么您可能仍然想要一份副本。
  • 如果你需要一个可变字典,声明你的方法参数需要一个。就这么简单。
  • 一般来说,相信人们不会尝试改变对象,除非明确告知它们是可变的。

关于iOS——区分 NSDictionary 和 NSMutableDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235965/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com