一、内存管理:
1.内存回收:
dealloc
只是把内存使用权释放,内容不清除,可能出现野指针的情况
2.memSet
:将内存初始化,即把内存的内容清楚
3.在ui
进行交互的时候,系统会在交互过程中自动加一个自动释放池,所以有时候滑动tableView
时程序会崩溃,要用属性赋值
4.在子线程中系统不会自动添加自动释放池,如果子线程中用了很多类方法,我们需要自己手动添加自动释放池
5.dealloc
中不需要对assign修饰的属性进行释放
6.给一个可变的字符串用copy
拷贝一份时,拷贝的字符串就是不可变的字符串了,并且是深拷贝;
7.给一个不可变的字符串用mutableCopy
拷贝一份副本时,拷贝的字符串是可变的,并且是深拷贝;
8.要进行拷贝的类必须遵循NSCopying
协议,并且重写copyWithZone
这个方法,是深拷贝还是浅拷贝与方法无关,只与方法的实现内容有关;
二、集合的内存管理 :深拷贝,浅拷贝,真正的深拷贝(归档)
1.当一个可变的集合,使用
mutableCopy
时都会产生一个新的对象,但集合的元素是一个浅拷贝;
2.真正的深拷贝:即集合中的元素和集合都发生深拷贝,则要使用归档;
3.代理中如果是单一持有时,代理对象用assign
和retain
一样;在UITableView
的代理中设置assign
,防止产生循环引用的情况;
4.autoreleasepool
是runloop
的一种管理方式,先接收到release
消息的对象后释放,像栈的管理形式;
5.iPhone
的每个应用的内存最高为120M