一贱呐、內(nèi)存管理:
1.內(nèi)存回收:
dealloc
只是把內(nèi)存使用權(quán)釋放,內(nèi)容不清除,可能出現(xiàn)野指針的情況
2.memSet
:將內(nèi)存初始化怯晕,即把內(nèi)存的內(nèi)容清楚
3.在ui
進(jìn)行交互的時候,系統(tǒng)會在交互過程中自動加一個自動釋放池缸棵,所以有時候滑動tableView
時程序會崩潰舟茶,要用屬性賦值
4.在子線程中系統(tǒng)不會自動添加自動釋放池,如果子線程中用了很多類方法堵第,我們需要自己手動添加自動釋放池
5.dealloc
中不需要對assign修飾的屬性進(jìn)行釋放
6.給一個可變的字符串用copy
拷貝一份時稚晚,拷貝的字符串就是不可變的字符串了,并且是深拷貝型诚;
7.給一個不可變的字符串用mutableCopy
拷貝一份副本時客燕,拷貝的字符串是可變的,并且是深拷貝狰贯;
8.要進(jìn)行拷貝的類必須遵循NSCopying
協(xié)議也搓,并且重寫copyWithZone
這個方法,是深拷貝還是淺拷貝與方法無關(guān)涵紊,只與方法的實現(xiàn)內(nèi)容有關(guān)傍妒;
二、集合的內(nèi)存管理 :深拷貝摸柄,淺拷貝颤练,真正的深拷貝(歸檔)
1.當(dāng)一個可變的集合,使用
mutableCopy
時都會產(chǎn)生一個新的對象驱负,但集合的元素是一個淺拷貝嗦玖;
2.真正的深拷貝:即集合中的元素和集合都發(fā)生深拷貝患雇,則要使用歸檔;
3.代理中如果是單一持有時宇挫,代理對象用assign
和retain
一樣苛吱;在UITableView
的代理中設(shè)置assign
,防止產(chǎn)生循環(huán)引用的情況器瘪;
4.autoreleasepool
是runloop
的一種管理方式翠储,先接收到release
消息的對象后釋放,像棧的管理形式橡疼;
5.iPhone
的每個應(yīng)用的內(nèi)存最高為120M