程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 弱引用-ios 與xib視圖加載相關的內存管理問題

弱引用-ios 與xib視圖加載相關的內存管理問題

編輯:編程綜合問答
ios 與xib視圖加載相關的內存管理問題

在通過xib加載視圖的時候,我們遵循一個准側
那就是頂層視圖 我們的成員變量要是強引用 若是非頂層視圖,而是頂層視圖的子視圖,為了防止頂層視圖被釋放以後,字視圖還存在而造成的內存洩漏,我們把這字視圖的成員變量定義為弱飲用
現在問題是,在ARC模式下,假如我有個視圖控制起ViewController,然後有個UIButton子視圖
@interface ViewController:UIViewController
{
weak/strong IBOutlet UIButton* button;

這時,在ARC模式下,無論我是指定它是強引用,還是弱引用,在加載了xib文件中(xib中設置了button和一個UIButton的關聯),用
NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)button));方法查看button的retainCount,都一樣是3

所以我就不了解了,不是強應用會使對象的retainCount加1,而弱引用不會影響對象的retainCount嗎?怎麼無論用strong還是weak,得到的retainCount都是相同值呢?
在加載xib文件時,底層到底是怎樣給button賦值的?

真的想不明白,請各位大神指教一下,不勝感激

最佳回答:


這個跟你是不是 xib 沒關系的, 就算你用代碼創建也是一樣,對於你的問題,給你看個例子

     UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 40, 30, 30)];
    label.backgroundColor = [UIColor yellowColor];
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)label));
    [self.view addSubview:label];
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)label));
    __weak UILabel *aLabel = label;
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)label));
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)aLabel));

輸出是:1,2,2,3
這跟我們以前的理解方式很不同,它僅僅是 weak 變量的 retainCount +1 ,而沒有影響到其他變量。所以 weak 的 retainCount 管理是獨立的。當只剩下 weak 引用時,就會被自動清零並釋放

u013623867
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved