記憶體管理問題總結 共54個問題
以問題驅動學習的好處
1.學習效率極其的高
2.能夠清楚的知道,自己那裡會了,那裡不會.(時間)
3.課後寫**練習時目的性很強
4.擅長總結,在面試的時候能夠體現的淋漓盡致,使你面試非常容易
5.方便日後複習
6.只要你能夠把每天的問題都能夠通過自己的總結清晰的搞明白,那麼你的薪水一定是10k以上
**記憶體管理 問題
1.什麼是ios記憶體管理?
就是在物件不再被使用的時候,把它即時的從記憶體中清除掉
2.為什麼要使用記憶體管理?
1.嚴格的記憶體管理,能夠是我們的應用程在效能上有很大的提高
2.如果忽略記憶體管理,可能導致應用占用記憶體過高,導致程式崩潰
3.系統判斷乙個物件是否要被銷毀的依據是什麼?
每個物件建立出來的時候,都有乙個retaincount屬性,預設值是1,當retaincount = 0的時候,系統就會將該對像銷毀
4.如何使物件的retaincount 值增加?
呼叫retain 物件方法
5.如何使物件的retaincount 值減少?
呼叫release 物件方法
6.如何判斷物件已經被銷毀了?
1.從寫nsobject提供的,dealloc方法,當物件即將被銷毀的時候,缺省會呼叫該方法
2.dealloc方法中一定要呼叫[super dealloc]方法
6.1 dealloc這個函式是那裡來呀?
7.記憶體管理原則是什麼?
只要是出現new,alloc,retain,就要配對出現release操作,或者autorelease操作
**單個物件記憶體管理 問題
1.什麼是野指標?
物件的retaincount已經為0,儲存了物件指標位址的變數就是野指標
1.1 使用野指標會有什麼問題?
使用野指標呼叫物件的方法,會導致野指標異常,導致程式直接崩潰
2.什麼是殭屍物件?
retaincount = 0的物件被稱之為殭屍物件,也就是不能夠在訪問的物件
2.1是什麼問題導致,訪問殭屍物件,時而正確時而錯誤?
2.2如何開始xcode的時時檢測殭屍物件功能?
3.如何防止出現野指標操作?
通常在呼叫完release 方法後,會把儲存了物件指標位址的變數清空,賦值為nil
在oc中沒有空指標異常,所以使用[nil retain]呼叫方法不會導致異常的發生
4.什麼是記憶體洩漏?
已經不在使用的物件,沒有正確的釋放掉,一直駐留在記憶體中,我們就說是記憶體洩漏
5.記憶體洩漏有幾種情況?
1.沒有配對釋放,不符合記憶體管理原則
2.物件提前賦值為nil或者清空,導致release方法沒有起作用
6.當物件的retaincount = 0 時 能否呼叫 retain方法使物件復活?
已經被釋放的物件是無法在復活的
7.關於記憶體我們主要研究的問題是什麼?
1.野指標
2.記憶體洩露
**多個物件記憶體管理 問題
1.物件與物件之間存在幾種關係?
1.繼承關係
2.組合關係
3.物件作為方法引數傳遞
2.物件的組合關係中,如何確保作為成員變數的物件,不會被提前釋放?
重寫set方法,在set方法中,retain該對像,使其retaincount值增加 1
3.組合關係導致記憶體洩漏的原因是什麼?
在set方法中,retain了該物件,但是並沒有配對釋放
4.作為成員變數的物件,應該在那裡配對釋放?
在dealloc函式中釋放
** set方法記憶體管理 問題
1.在物件的組合關係中,導致記憶體洩漏有幾種情況?
1.set方法中沒有retain物件
2.沒有release掉舊的物件
3.沒有判斷向set方法中傳入的是否是同乙個物件
2.該如何正確的重寫set方法?
1.先判斷是否是同乙個物件
2.release一次舊的物件
3.retain新的物件
**記憶體管理@property引數 問題
1.@property引數分為幾類?
1.與set方法記憶體管理相關的引數
2.是否要生成set方法相關
3.多執行緒相關
4.set和get方法的名稱相關
2.@property引數那些適用於物件型別,那些適用於基本資料型別
3.如何使用@property生成符合記憶體管理的set方法?
4.@property retain引數能否用於基本資料型別?
**手動記憶體管理類的迴圈引用 問題
1.什麼情況下會出現類的迴圈應用?
2.@class關鍵子的作用?
3.手動記憶體管理如何解決類的迴圈引用問題?
4.在.h檔案中使用@class關鍵字宣告乙個類後,在.m檔案中是否能夠直接掉用該物件的方法?
**自動釋放池 問題
1.什麼是自動釋放池?
自動釋放池是用來儲存多個物件型別的指標變數
2.自動釋放池對池內物件的作用?
被存入到自動釋放池內的物件,當自動釋放池被銷毀時,會對池內的物件全部做一次release操作
3.物件如何放入到自動釋放池中?
當你確定要將物件放入到池中的時候,只需要呼叫物件的 autorelease 物件方法就可以把物件放入到自動釋放池中
4.如何建立自動釋放池?
物件在自動釋放池內部呼叫autorelease 方法
5.自動釋放池能否巢狀使用?
能6.自動釋放池何時被銷毀?
在autorelease } 執行完後
7.多次呼叫物件的autorelease方法會導致什麼問題?
多次將位址存到自動釋放池中,導致野指標異常
8.自動釋放池作用
將物件與自動釋放池建立關係,池子內呼叫autorelease 方法,在自動釋放池銷毀時銷毀物件,延遲release銷毀時間
**自動釋放池應用 問題
1.實際開發中一般如何使用autorlease
就是在方法中建立新的物件並且需要返回的時候
快速建立乙個類方法
**arc機制 問題
1.什麼是arc機制
自動引用計數,不需要程式設計師關心,物件的retain,與release操作
2.什麼是強指標(strong),弱指標(weak)
3.arc機制中,系統判斷物件是否被銷毀的依據是什麼?
指向物件的強指標是否被銷毀
4.arc機制中,如何觀察物件被銷毀了?
5.arc機制中為什麼還有autoreleasepool?
6.arc機制的本質是什麼?
對releasecount的計算,建立物件 +1, 清空指標 -1,或者越到autoreleasepool的大括號 -1
7.arc的目的
是讓程式設計師不在關心物件的retaincount
**arc機制 @property引數 問題
1.arc機制中如何讓@property生成符合記憶體管理的set方法
2.@property weak引數能否用於基本資料型別?
不能3.為什麼在arc機制中,不建議使用assign類表示物件的直接賦值
4.arc機制中不建議使用retain,assign ,容易造成混淆
**手動記憶體管理**轉換成arc** 問題
1.如何使用xcode自帶的功能,將手動記憶體管理**轉換成arc機制**
手動記憶體管理與arc機制**共存 問題
1.為什麼會出現手動記憶體管理與arc機制**共存現象?
2.為什麼不統一的將**都轉換成arc機制?
3.如何才能夠讓手動記憶體管理的**與arc機制的**共存?
**arc機制中類的相互引用 問題
1.arc機制中類的相互引用,與手動記憶體管理類的相互引用有什麼區別嗎?
2.如何解決arc機制下類的相互引用問題?
在.h檔案中使用@class關鍵字宣告乙個類,兩端不能都用強指標
一端用strong,一端用weak
C記憶體分配的注意點
c語言的記憶體分配,有很多的注意點。1.int 的大小問題。int 在不同的編譯器下大小是不一樣的。在tc下是2位,在 vc 下,和 long 一樣,是4位。2.memset 不是用來分配記憶體的,而是設定某個區域的記憶體為某個值,這個記憶體區域必須是可以修改的,而且是已經分配好了的。這個函式的原型...
OC中記憶體管理 ARC 注意點及單個物件處理
2019獨角獸企業重金招聘python工程師標準 第一 知道乙個專案是arc的還是mrc的,除了專案設定裡可以看,還有一點就是 arc是允許寫一些mrc的retain與release包括autorelease的。第二 了解兩個概念,強指標與弱指標 person p person alloc init...
買記憶體,注意這兩點
由於電腦出廠時的記憶體比較小,一般的是4g,現在有好多童鞋的記憶體已經不能滿足他了,電腦工作的時候有一點的卡頓,那麼為了讓自己的電腦更加流暢,就給他裝上乙個記憶體條吧,來拓展一下他的記憶體,讓他更好的為你服務!但是現在記憶體條的 還是居高不下,為了讓自己舒服點,該出手時就出手 1.匹配正確的記憶體型...