你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> delegate為什麼用弱引用

delegate為什麼用弱引用

編輯:IOS開發綜合
比如在A頁面設置B的delegate為A的實例,  // A.m中某處 B* b = [B alloc] init]; b.delegate = self; [self.view addSubview:b]; [b release]; 那麼 1.是A負責創建B的,A的生命周期一定比B要長(B存在,A一定也存在;A存在,B不一定存在) 也就是說 在B(實例b)存在的時候,A(的實例)一定存在, 所以沒有必要用retain將引用計數+1,assign足以   2.退一步假設存在這樣的情況:A比B先掛掉(A的實例先被release銷毀) 那麼當然希望是[a relase]後,A中的方法不再被B調用,但是使用retain時候,A還是沒有被銷毀,所以 A中的方法仍會被B調用,但是assgin就無此問題   3.本質上delegate就是一根指向先於它存在的某個類(CCClass)的指針(假設是:ccPoint),我們通過delegate這根指針去指向這個已經存在的指針(ccPoint) 那麼通過delegate即ccPoint也就可以訪問CCClass中的實例方法   4.避免retain cycle,即:有A,B兩個Object, A中有一個B的實例變量,B中又有一個A的實例變量,要release A就必須releaseA中的B,而要release B有必須release B中的A,這樣就產生了一個Retain Circle,A B都不能被dealloc.解決Retain Circle的方法就是使用弱引用(weak reference),弱引用沒有被引用的那個Object的所有權,也就不需要release它,從而解決了Retain Circle問題.為了防止Retain Circle的發生, delegate通常都是弱引用的, 因此我們一般不應該retain一個delegate。NSURLConnection是個例外。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved