大家在项目中一般是怎么样将服务器返回的json转化成自己定义的模型类呢? 我在项目中一般都是使用的MJExtension。 本文讲解的也基本就是解读MJExtension中的部分源码。...接下来,我们拿到值后将值的类型转换为属性对应的数据类型。...,将字典中的value作为字典处理,然后再调用字典转模型的方法返回一个模型类,所以在包装类型时还要有个属性表示它是否是自定义的模型类,才能作为依据继续递归,判断的方法是看它是否来自于Foundation...性能优化 将5个字典转模型的例子同时运行,在NSObject+ScottProperty分类中的+ (NSArray *)properties方法中添加一句打印NSLog(@"%@调用了properties...可以看到,很多的类都不止一次调用了获取属性的方法,对于一个类来说,要获取它的全部属性,只要获取一次就够了.获取到后将结果缓存起来,下次就不必进行不必要的计算。
利用runtime 获取所有属性来进行字典转模型,其实就是根据创建的Model,把网络返回来的字典数据赋值到Model中,对Model属性进行赋值。...看以下代码时,以Model为中心,而不是以dic中的数据为中心。...,进而对数组中每个模型遍历并字典转模型,但是我们不知道数组中的模型都是什么类型,我们可以声明一个方法,该方法目的不是让其调用,而是让其实现并返回模型的类型。...objectWithDict:value]; }else if ([type isEqualToString:@"NSArray"]) { // 如果是数组类型,将数组中的每个模型进行字典转模型...; } // 将数组中的所有模型进行字典转模型 for (int i = 0; i < array.count
[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class...JSON数据 我们既然能获取到属性类型,那就可以拦截到模型的那个数组属性,进而对数组中每个模型遍历并字典转模型,但是我们不知道数组中的模型都是什么类型,我们可以声明一个方法,该方法目的不是让其调用,而是让其实现并返回模型的类型...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class...}else if ([type isEqualToString:@"NSArray"]) { // 如果是数组类型,将数组中的每个模型进行字典转模型...class = NSClassFromString(classStr); } // 将数组中的所有模型进行字典转模型
,也就是进行递归,需要注意的是我们要排除系统的对象类型,例如NSString,下面的方法中我添加了一个类方法方便递归。...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class class = NSClassFromString(type); value...[type hasPrefix:@"NS"]) { // 将对象名转换为对象的类型,将新的对象字典转模型(递归) Class class = NSClassFromString(type); value...= [class objectWithDict:value]; }else if ([type isEqualToString:@"NSArray"]) { // 如果是数组类型,将数组中的每个模型进行字典转模型...*classStr = [self arrayObjectClass]; class = NSClassFromString(classStr); } // 将数组中的所有模型进行字典转模型
在不可见源码的情况下,我们可以借助Rutime交换方法实现,为原有方法添加额外功能,这在实际开发中具有十分重要的意义。...的分类中拦截系统方法,将其替换为我们自定义的方法,代码如下: //load方法不需要手动调用,iOS会在应用程序启动的时候自动调起load方法,而且执行时间较早,所以在此方法中执行交换操作比较合适。...person-name:%@,person-age:%ld",person.name,person.age); //person-name:梧雨北辰,person-age:18 3.实现字典与模型的转换 字典数据转模型的操作在项目开发中很常见...来实现字典转模型的操作,大致的思路是这样: 借助Runtime可以动态获取成员列表的特性,遍历模型中所有属性,然后以获取到的属性名为key,在JSON字典中寻找对应的值value;再将每一个对应Value..."_"号 NSString *propertyName = [ivarName substringFromIndex:1]; //2.3以属性名为key
不得不承认KVC在开发过程中是神器一般的存在。如果正确灵活使用kvc,会使得整个开发过程轻松很多。简单而强大。...,再转成字典返回,用于将Model转到字典。...Right keypath部分:需要进行集合操作的属性。 (1)简单集合操作符 @count: 返回一个值为集合中对象总数的NSNumber对象。...@sum: 首先把集合中的每个对象都转换为double类型,然后计算其总,最后返回一个值为这个总和的NSNumber对象。...@avg: 把集合中的每个对象都转换为double类型,返回一个值为平均值的NSNumber对象。 @max: 使用compare:方法来确定最大值。
NSString *str1 = @"rose"; @"rose"本质上是1个NSString对象,这个对象中存储的是字符串"rose"。 将这个字符串对象的地址返回赋值给str1指针。...将字符串中第1个参数替换为第2个参数.原来的指针指向字符串的内容是不会变的,新串是以方法的返回值返回的.如果串1中有多个相同的被替换的串,会全部替换。...这个方法还可以做删除串中的一些字符. 原理: 将想要删除的字符替换为@""即可。 字符串数据转换为其他的类型....- (NSString *)componentsJoinedByString:(NSString *)separator; 字符串提供的分割字符串组成数组的方法 将字符串以separator分割,每一个字符串成为数组元素存入到数组中...NSDate 日期类也是会经常使用到的,通常需要将服务器返回的时间进行一些处理,或者与当前时间进行计算,然后显示。
方法 1:在每个需要跳转的地方写一堆判断语句以及跳转语句。 方法 2:将判断语句和跳转语句抽取出来,写到基类,或者对应的 Category 中。...在日常开发中,将网络请求中获取的 JSON 数据转为数据模型,是我们开发中必不可少的操作。...实现的大体思路如下:借助 Runtime 可以动态获取成员列表的特性,遍历模型中所有属性,然后以获取到的属性名为 key,在 JSON 字典中寻找对应的值 value;再使用 KVC 或直接调用 Getter...需求:将服务器返回的 JSON 字典转为数据模型。...从这份 JSON 中可以看出,字典中取值除了字符串之外,还有数组和字典。那么在将字典转换成数据模型的时候,就要考虑 模型嵌套模型、模型嵌套模型数组 的情况了。
写入蓝牙命令 data转16进制字符串 16进制转String crc算法 数据异或计算,字符串异或 负数异或计算 依次写入多个命令 蓝牙开发的大致流程 首先来了解一下蓝牙开发的流程,总结如下: Xcode...Data类型,将Data转为16进制的字符串用于处理,或者转为 Byte 进行处理; NSString *value = [[BluetoothTool convertDataToHexStr...Data转16进制字符串 蓝牙返回的数据是 NSData 类型,此时可以调用下面方法将 NSData 转为 16进制字符串,然后针对字符串取指定位进行处理。...NSString *hexStr = [NSString stringWithFormat:@"%02lx", (long)number]; 16进制字符串转十进制数字,用于需要进行算术运算的情况,需要先将字符串转为十进制数字...解决办法是,针对出现负数的情况,改为(256+负数)转为正值,然后再转16进制再去异或计算。
因此,它的内存并不存储在堆中,也不需要malloc和free) 在内存读取上有着3倍的效率,创建时比以前快106倍 当8个字节可以承载用于表示的数值时,系统就会以Tagged Pointer的方式生成指针...测试 测试准备: 在现在的版本中,为了保证数据安全,苹果对 Tagged Pointer 做了数据混淆,开发者通过打印指针无法判断它是不是一个Tagged Pointer,更无法读取Tagged Pointer...) 最低位:数据类型(该例是2,转换为二进制是0010,也就是2,对应int) 剩下中间的位:存储数据(该例是00000000000001,对应num0的值1) NSString NSString *...:字符长度(该例是1,转换为二进制是0001,十进制也是1,表示字符串长度1) 剩下中间的位:存储数据(该例是00000000000030,转为十进制是48,对应ASCII码表中的0) 注意事项 isa...而当字符少于10个时,系统采用了Tagged Pointer机制将数据直接存储在指针上。 objc_release 内部会判断,如果是Tagged Pointer则不会进行release,直接赋值。
获取类中的成员变量 我们可以发现获取类中的方法,属性过程基本一致:通过元类获取方法列表或属性列表,然后在进行遍历。...编译错误,提示实例变量无法添加到分类中,用正常的方法确实无法在分类中添加属性。 但是可以通过Runtim机制进行“添加”。其本质是给这个类添加属性关联,而非把这个属性添加到类中。...,若返回Yes说明类中没有该方法,然后再使用 class_replaceMethod() 方法进行取代;若返回NO,说明类中有该方法,使用method_exchangeImplementations()...字典转属性 将字典转化为模型,是在我们iOS开发中最为常用的技能。...当然,这个方法只是介绍了利用runtime进行字典转模型的原理,实际中还有很多需要考虑的细节,项目中我还是推荐使用像YYModel这些比较成熟而且安全的模型框架。
序 在简书写了一个月的blog,开始只是简单的将自己之前的笔记进行CCVV模式(command+c/v),渐渐地已经摸索出更多的套路,比如多写些demo,多加些配图,较多的知识点用思维导图做索引,...,如果打印不出,尝试在AppDelegate中进行授权~!...例子1:从记录中取姓,并转换为NSString类型 CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty)...ABRecordRef) 通过ABRecordSetValue函数设置组名 通过ABAddressBookAddRecord函数将组添加到通讯录数据库中 通过ABAddressBookSave函数保存刚才所作的修改...done按钮的时候触发,返回的contactProperties中只包含选中的contactProperties,没选中的话返回空。
这里我也给出了两种方式: 方式一(推荐):如上面代码一样,设置最后一个参数block,然后在block中判断当前是哪个阶段的回调。...* @param title 名称 * @param value 实际值 * @param fontSize 字号大小 * 警告:因字号和字体与iOS中字体不一致,计算出来有误差...另一是将图片转换为点阵图数据。 补充 可能对于小票的样式不仅仅局限于封装的几种,有人提到左边二维码图片,右边居中显示一些文字的布局方式,这样用原来的指令集组合的方式就很难实现。...对于一些不太好弄的布局样式,我们可以曲线救国,这里有一些新的场景和解决方案: 可以先在容器视图上实现,然后再截取容器视图,将截取后的图片打印出来就可以啦? 。...的viewDidLoad方法中,将导航栏右按钮的注释修改下: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional
*)base64StringFromText:(NSString *)text 函数描述 : 将文本转换为base64格式字符串 输入参数 : (NSString *)text 文本 输出参数...(NSString *)text 函数描述 : 将文本转换为base64格式字符串 输入参数 : (NSString *)text 文本 输出参数 : N/A 返回参数 : (NSString *...*)textFromBase64String:(NSString *)base64 函数描述 : 将base64格式字符串转换为文本 输入参数 : (NSString *)base64 base64...:(NSString *)base64 函数描述 : 将base64格式字符串转换为文本 输入参数 : (NSString *)base64 base64格式字符串 输出参数 : N/A 返回参数 :...*)key 函数描述 : 文本数据进行DES加密 输入参数 : (NSData *)data (NSString *)key 输出参数 : N/A 返回参数 : (NSData *) 备注信息 : 此函数不可用于过长文本
但有时候,仅仅停留在这些基本操作还不能直接满足一些需求,这时候可以利用这些基本操作进行一些字符串的衍生操作。...【字符串转化为数字型再计算】intValue、floatVale......:@"itcast.cn"]; NSLog(@"bbc1: %@",bbc1); 9.在【制定的范围追加】字符串(插入字符串、替换字符串) NSString *aac =@"wwwbbbccc...字符转int int intString = [newString intValue]; 5. int转字符 NSString *stringInt = [NSString stringWithFormat...字符转float float floatString = [newString floatValue]; 7. float转字符 NSString *stringFloat = [NSString stringWithFormat
@avg 读取集合中每个元素的右键路径指定的属性,将其转换为double类型 (nil用 0 替代),并计算这些值的算术平均值。然后将结果以NSNumber实例返回。...@count 计算集合中的元素个数,以NSNumber实例返回。 // 计算 transactions 集合中的元素个数。...@sum 读取集合中每个元素的右键路径指定的属性,将其转换为double类型 (nil用 0 替代),并计算这些值的总和。然后将结果以NSNumber实例返回。...可以通过重写compare:方法对搜索过程进行控制。 数组运算符 根据运算符的条件,将符合条件的对象以一个NSArray实例返回。...@distinctUnionOfArrays 读取集合中的每个集合中的每个元素的右键路径指定的属性,放在一个NSArray实例中,将数组进行去重后返回。
这个框架中的类都是一些最基础的类。来自于这个框架的类名以NS开头。 ?...在ARC无效时,Core Foundation 框架中的retain/release 分别是 CFRetain /CFRelease。...*) 例子 -(void)bridgeInMRC { // 将Foundation对象转换为Core Foundation对象,直接强制类型转换即可 NSString *strOC1...%@", strOC1, strC1); [strOC1 release]; CFRelease(strC1); // 将Core Foundation对象转换为Foundation...在ARC中,CF和OC之间的转化桥梁是 __bridge,有3种方式: __bridge 只做类型转换,不改变对象所有权,是我们最常用的转换符。
】使用CFStringTransform将汉字转换为拼音 http://blog.csdn.net/meegomeego/article/details/23253939 iOS在CoreFoundation...transform可以指定要进行什么样的转换,这里可以指定多种语言的拼写转换。reverse指定该转换是否必须是可逆向转换的。如果转换成功就返回true,否则返回false。...还好CFStringTransform同时提供了将音标字母转换为普通字母的方法kCFStringTransformStripDiacritics。...1.NSString* resourcePath = [[NSBundlemainBundle] resourcePath];//返回的是resource文件夹的路径,但是在iphone simulator...里运行,在控制台把resourcePath打印出来的时候,会发现,路径里没有resource这个文件夹。
代表子字符串在 原有字符串中的位置,length代表长度。...*)uppercaseString : 将字符全改成大写的; -(NSString *)lowercaseString : 将字符全改成小写的; -(NSString *)capitalizedString...: 将首字母进行大写; 代码事例: 1 2 3 4 5 6 7 8 9 10 11 12 13 //字符串的大小写转换 NSString *string = @"hello world...:(NSString *) separator:以字符串中的某个字符进行分割,返回数组对象 测试代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...18 //字符串替换函数 NSString *string = @"abc,def,g"; //将字符串中特定的字符串换成指定的字符串 NSString *after = [string stringByReplacingOccurrencesOfString