拷贝
浅拷贝:不可变对象的不可变拷贝是浅拷贝,别的都是深拷贝(单层深拷贝)。
本来准备写的,但是之前的归档解档方法失效了。
isEqual、isEqualToString和等号
-
isEqual: 判断两个对象的等同性,首先判断两个对象的地址是否相同,再判断类型是否一致, 然后再判断对象的具体内容是否一致
-
isEqualToString: 直接判断字符串内容是否相等
-
==: 对于基本数据类型, ==运算符比较的是值; 对于对象类型, ==运算符比较的是对象的地址是否相同
NSString的三种创建
直接创建 stringWithString、StringWithFormat
- 在OC中stringWithFormat会新申请一片空间并初始化字符串,所以每一个用stringWithFormat方法得到的字符串其指针都是不相同的,
但是内容相同时,地址又是相同的;(但是这样觉得是因为我测试的时候用的字符串,创建的字符串的长度都较短,所以是taggedPointer类型,taggedPointer类型的变量并不符合这种情况,当不是taggedPointer类型的变量时,就是上文中的结果——每个都不一样)。 - 而stringWithString是通过浅拷贝的方式得到字符串的,浅拷贝只拷贝指针不拷贝对象,所以其指针是相等的,内容也相等;
- 快速初始化是首先根据一定的方法(此方法和NSSet(集合)中的存放对象的方法一样都是hash算法)在内存中查找是否已经存在了这样的一个对象,若是存在则放回此对象的指针,若不存在,则根据一定的方法找到一片内存空间存放对象,并返回指针。