objective-C基础教程(第2版)-17,18,20章杂记

文件加载与保存

cocoa中存在一种名为属性列表(property list)的对象,简写plist,这些列表可以放置一些cocoa可以处理的对象,这些属性列表类似NSArray, NSDictionary, NSString, NSNumber, NSDate, NSData以及它们的可修改形态(Mutable)

集合型属性列表类(NSArray和NSDictionary)具有一个writeToFile:atomically:方法将内容写入文件,atomically传递一个BOOL值表明是否需要将内容存到老师文件中,这能保证在保存过程中发生意外是不会破坏原始文件
在这里插入图片描述

NSPropertyListSerialization

在这里插入图片描述
对于自定义对象且不是属性列表类型时,可以通过NSCoding协议和实现方法来编码和解码对象

键/值编码(KVC)

@synthesize场景

KVC的基本调用

-valueForkey:
-setValue:forKey:
//例如
NSString *name = [obj valueForKey:@"name"];
// 可以通过此方法获取obj对象的name属性
// 对于int,float,struct最终setValueForKey会自动装箱放入NSNumber或NSValue中,之后调用的set属性:中会先开箱取出该值

// 键路径,假设一个对象car内存在另一个对象属性数组tires且tire中存在一个属性pressure则
[car valueForKeyPath:@"tires.pressure"];
// 将打印car对象中tires数组中每个对应tire对象的pressure,但不支持tires[0].pressure这种索引访问

在键路径中不仅能引用对象值还可以引用一些运算符来进行运算
// 计算tires的个数, @count
[car valueForKeyPath:@"tires.@count"];
// 计算tires中pressure的平均值, @avg
[car valueForKeyPath:@"tires.@avg.pressure"];
// 类似的还有@min和@max用法与@avg相同

kvc提供了一些便利的同事存在某些缺点

  • KVC需要解析字符串来计算你所需的答案,因此速度比较慢
  • 同事处理tires.@avg.pressure时编译器不能判断它是否为错误的键路径,可能会出现运行时错误
dictionaryWithValuesForKeys: 
// 接收一个字符串数组,对其中的每个值调用valueForKey:方法
在使用setValue:forKey:时若value传递的是nil会出现一个异常
此时可以使用setNilValueForKey:
// 区分<null>和(null), 前者是[NSNull null]对象,后者是最终的nil值

xcode静态分析器,product => Analyze

NSPredicate
NSPredicate用于指定过滤器条件

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == 'ab'"];
//除去'ab'字符串常量还可以使用$NAME 这种名为键为NAME的值,也可以配合使用格式扫码付%
[NSPredicate predicateWithFormat:@"%K == '%@'", @"name", @"ab"];// %K用来指定键路径

SELF表式响应谓词计算的对象,针对字符串还有BEGINSWITCH,ENDSWITH,CONTAINS
LIKE用于匹配运算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值