■Introspection和comparison(反省机制和对比机制).许多NSObject方法使你能够让编译器查询一个对象。反省方法(introspection methods)帮助你探查一个对象在类继承机制中的位置,决定是否实现一些方法,并测试它是否遵循一些协议。而一些类仅是有一些方法。
❏superclass和class方法(类和实例(class and instance))分别返回接收器的父类和类,作为一个Class对象。
❏isKindOfClass:和isMemberOfClass:,通过这两种方法可以确定一个类的从属关系。后者测试一个接收器是否是一个指定类的实例;而后者可以测试类的从属关系。
❏respondsToSelector:方法测试一个接收器是否通过selector实现(implements)了一个标志符话的方法。而instancesRespondToSelector:测试了一个给定的类实例化之后(这个消息的接收方法为静态方法,译者注)是否实现了一个指定的方法。
❏conformsToProtocol:方法,测试接收器(对象或者类)符合一个给定的协议(protocol)。
❏isEqual:和hash方法,用于对象比较。
❏description方法,允许一个对象返回一个字符串来描述它的内容;这个常用于调试debugging (“printobject”命令)。通过“%@”以字符串输出特殊的指定对象
NSString &
NSMutableString
NSString作为属性时候,用copy还是strong修饰?
strong是单纯的增加对象的引用计数,而copy操作是执行了一次深拷贝
NSArray &NSMutableArray
NSArray各种遍历方式,倒序遍历
NSArray简便初始化方法@[@"1",@"2"];
浅拷贝。数组本身使用地址,但是数组item仍是旧对象
无论copy、arrayWithArray、copyWithZone数组内对象并没有变
只是copy出来的array是新地址,arrayWithArray出来的数组也是新地址。
深拷贝。数组本身使用地址,但是数组item是新地址
[[NSArray alloc]
initWithArray:someArray copyItems: YES];
深拷贝时候,数组中的item必须实现NSCopying协议并实现copyWithZone:
★防止NSArray was mutated while being enumerated
array包含array的情况深拷贝。NSArray* trueDeepCopyArray = [NSKeyedUnarchiver\unarchiveObjectWithData:[NSKeyedArchiverarchivedDataWithRootObject:oldArray]];
NSDictionary &NSMutableDictionary
取值时候,最好判断object的类型。if([object isKindOfClass:[NSString class]]){ //todo};
NSNumber和NSInteger NSRange
前者专门用来装基础类型的对象,把整型、单精度、双精度、字符型等基础类型存储为对象
NSDate & NSDateFormatter &NSCalendar
可判断过去几个-
(NSDateComponents *)components:fromDate:toDate:options:可获取时间戳
NSCoding &
NSCoder仅有的两个方法,数据的序列号和反序列化
- (void)encodeWithCoder:(NSCoder
*)aCoder;
- (nullableinstancetype)initWithCoder:(NSCoder *)aDecoder;
NSCopying &NSZone
+ (instancetype)allocWithZone:深拷贝,类似于memcpy这样的C方法
NSFileManager删除文件的时候先判断是否存在是个好习惯