iOS之NSObject

■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删除文件的时候先判断是否存在是个好习惯

你可能感兴趣的:(iOS之NSObject)