ios怎么取出数组中的某个字典

ios怎么取出数组中的某个字典,第1张

可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对。而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对。 网络请求有get和post方法

  在iOS开发过程中,我们有时候会有这样的需求,将一个 不可变的字典或者数组转换为可变的,可以使用系统的mutableCopy方法,但是这样只是第一层可变,如果数组或字典有多层时,我们去修改值深层次的值时,会发生崩溃,这样并不能达到预期的要求,可以给数组和字典添加分类来实现这个功能。

可以自己定义一个文件

h 文件中

m 文件中

只要导入头文件,字典调用mutableDicDeepCopy,字典中所有value(数组或者字典)无论多少层都是可变的,数组调用mutableArrayDeeoCopy,数组中所有的元素(数组或者字典) 无论多少层也是可变的,可以直接取修改字典或数组中元素的值。

在日常开发中,将网络请求中获取的 JSON 数据转为数据模型,是我们开发中必不可少的 *** 作。

通常我们会选用诸如 YYModel 、 JSONModel 或者 MJExtension 等第三方框架来实现这一过程。这些框架实现原理的核心就是 Runtime 和 KVC ,以及 Getter / Setter 。

实现的大体思路如下:借助 Runtime 可以动态获取 成员列表 的特性,遍历模型中所有属性,然后以获取到的属性名为 key ,在 JSON 字典中寻找对应的值 value ;再使用 KVC 或直接调用 Getter / Setter 将每一个对应 value 赋值给模型,就完成了字典转模型的目的。

从这份 JSON 中可以看出,字典中取值除了 字符串 之外,还有 数组 和 字典 。那么在将字典转换成数据模型的时候,就要考虑 模型嵌套模型 、 模型嵌套模型数组 的情况了。

经过分析,我们总共需要三个模型: XXStudentModel、XXAdressModel、XXCourseModel。

NSObject+XXModelh、NSObject+XXModelm 就是我们用来解决字典转模型所创建的分类,协议中的 + (NSDictionary )modelContainerPropertyGenericClass 方法用来告诉分类特殊字段的处理规则,比如 id --> uid。

废话少说,直接看图说问题

出现原因:

这个 iOS升级为64位系统后,指针也是64位,苹果为了速度和节省内存,整出来的taggedpointer如果整数值能用60位表示,就生成NSTaggedPointerNumber的类,如果ascii字符串 小于等于9位 就生成NSTaggedPointerString的类,这个对开发者使用和NSStringNSNumber没什么区别,还能提升性能,只不要直接访问类的 isa指针就好了。(引用作者说明: 朱晓晓的技术博客   关注 )

也就是说,当OC中的数据,所占用的内存字节数<9位的时候,系统回对数据做优化处理。

解决方法:

1:将NSString类型的修饰词改为copy形式

2:将解析出来的数据直接深拷贝一份mutableCopy

3:上述方法若不行,直接采取最笨的方式,将NSTaggedPointerString类型的字符串与另外一个字符串拼接,注意一定是与其他字符拼接起来,然后再拆分。

如:假设 a是“NSTaggedPointerString类型”的字符串,a = @"110";

NSString b =  [NSString stringWithFormat:@"%@%@",a,@","];

//将其与一个@“逗号”拼接起来,然后拆分

字典中的value是你自己存放进去的,使得时候同样取出就ok,一般结构体等都需要特定转换,存放的如果是CGRect,则可用[valus CGRectValue]就可以使用了,存放的如果是CGSize则可用[value CGSizeValue]以此类推

数组、字典和集合的 基本用法

数组和集合的区别:

另:可变和不可变(数组)

可变数组和不可变数组常用方法  其中有几个方法比较实用,比如:

以上就是关于ios怎么取出数组中的某个字典全部的内容,包括:ios怎么取出数组中的某个字典、iOS 中数组和字典的可变拷贝、iOS 开发:Runtime(详解六)字典转模型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9722617.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存