iOS中有很多类,今天我们来讨论一些基本的类,以及他们的子类,相信NSString
,NSArray
,NSDictionary
每一个iOS开发者都不会陌生,然后我们平时在开发的时候,很多时候也都会用到他们的一个别的子类,NSMutableXX
,即可变对象
。
说到可变对象和不可变对象,可能少不了另一个知识点copy和mutableCopy了###
- copy和mutableCopy,深拷贝和浅拷贝
这里粗略的说下结论:
原始对象 |
操作过程 |
拷贝完之后的对象 |
不可变对象 |
copy |
浅拷贝,不会生成新对象,只是指针指向同一个对象 |
不可变对象 |
mutableCopy |
深拷贝,会生成新的对象,新对象为可变对象 |
可变对象 |
copy |
浅拷贝,会生成新的对象,新对象为不可变对象 |
可变对象 |
mutableCopy |
深拷贝,会生成新对象,新对象也是可变对象 |
- NSString,NSArray,NSDictionary类簇
其实,这些基本类,是存在一个类簇的概念的,也就是说我们外部调用的看着是同一个接口,但是内部操作的时候,可能会调用其他的子类,
这里罗列一下在研究的时候看到的具体子类:
2.1 NSString
,这里先声明两个变量,NSString *str声明的不可变string
和NSMutableString *strM声明的可变string
状态 |
类名 |
str |
__NSCFConstantString |
[str copy] |
__NSCFConstantString |
strM |
__NSCFString |
[strM copy] |
NSTaggedPointerString |
[strM mutableCopy] |
__NSCFString |
2.2 NSArray
,两个变量NSArray *arr声明的不可变array
,和NSMutableArray *arrM声明的可变array
状态 |
类名 |
arr |
__NSArrayI |
[arr copy] |
__NSArrayI |
arrM |
__NSArrayM |
[arrM copy] |
__NSFrozenArrayM 或者 __NSArrayI |
[arrM mutableCopy] |
__NSArrayM |
2.3 NSDictionary
,两个变量NSDictionary *dict声明的不可变dictionary
和NSMutableDictionary *dictM声明的可变dictionary
状态 |
类名 |
dict |
__NSDictionaryI |
[dict copy] |
__NSDictionaryI |
dictM |
__NSDictionaryM |
[dict copy] |
__NSFrozenDictioinaryM |
[dict mutableCopy] |
__NSDictionaryM |
给个demo
网友评论