一、內存管理:
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