二、 _weak修飾詞
因為使用_strong修飾詞,易出現迴圈引用,使用_weak來解決。
(1)迴圈引用的例子--在類中成員變數可能出現的迴圈引用
@inte***ce test : nsobject
(void)setobject:(id __strong)obj;
@end
@implementation test
- (id)init
(void)setobject:(id __strong)obj
@end
下面這段**將產生迴圈引用
控制流出了這段**區域時,變數test0對a的強引用消失,物件a被自動釋放。類似的物件b也被自動釋放。但是物件a的成員變數obj_ 還強引用物件b,從而記憶體洩漏
解決方法(2)self reference造成的迴圈引用
什麼是』self reference』物件對自己的引用簡稱』self reference』
例子 id test = [[test alloc] init];
避免』self reference』--使用_weak屬性修飾詞//離開此區域,物件的強引用消失,物件被自動釋放。因為弱引用對物件沒有擁有權。_weak修飾詞提供乙個弱引用,使用_weak可以避免迴圈引用。
id _weak obj = [[nsobject alloc] init];
上面**編譯後會出現警告:warning: assigning retained obj to weak variable; obj will be released after assignment [-warc-unsafe-retained-assign]
id __weak obj1 = nil;當乙個被weak修飾的變數對乙個物件有乙個引用,並且這個物件消失時,這個弱引用也就自動消失。這意味著變數被分配為nil。
nslog(@」b: %@」, obj1);
the result is:
a: b: (null)
(3)什麼是記憶體洩漏
記憶體洩漏指一些被認為釋放的物件仍保留在記憶體中,迴圈引用常造成記憶體洩漏
C語言修飾詞之const
const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的安全性和可靠性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。另外const在其他程式語言中也有出現,如c php5 c net hc08 c。c中const的使...
C語言修飾詞之violate
乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值 from memory 而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器 ...
C語言修飾詞之violate
乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值 from memory 而不是使用儲存在暫存器裡的備份。下面是volatile變數的幾個例子 1 並行裝置的硬體暫存器 ...