關於ARC的疑問.求指教啊.

tags:    時間:2013-12-03 18:41:10
我是我的項目中使用了ARC,有已個scrollview上面有三個View用來展示內容,每增加已個view就會移除另外一個view,使scrollview上面始終只有三個view.但是我發現一個問題,隨著我翻頁,內存在不斷地增加.後來我寫了一段測試代碼:
UIView *view = nil;
    while (TRUE) {
        [view removeFromSuperview];
        view = [[UIView alloc] initWithFrame:self.view.bounds];
        [self.view addSubview:view];
    }
我運行這段測試代碼發現內存是一直在增加的.到底是哪裡出了問題呢?
------解決方案--------------------
view是不是應該每次realse呢。
------解決方案--------------------
引用
view是不是應該每次realse呢。

用的ARC 不需要release
------解決方案--------------------
你例子的現象,跟 ARC無關,這個應該是跟生命周期有一定的關係。
你可以建一個非ARC的項目,把這段代碼加進去,然後把view release加上,,一樣會內存增加。
------解決方案--------------------
    dispatch_async(dispatch_get_main_queue(), ^(){
         UIView *view = nil;
         int i = 100000;
         while ( i > 0 ) {
             
             [view removeFromSuperview];
             view = [[UIView alloc] initWithFrame:self.view.bounds];
             [self.view addSubview:view];
             
             --i;
             if ( i % 1000 == 0 )
             {
                 NSLog(@"!!!!");
             }
         }
     });



可以試下這段代碼,運行中內存不停漲,結束后,內存會降下來。
所以我會說可能跟生命周期有關係。
具體的解釋我說不出來。

ARC我僅知道時候替代了手動的release而已。

也就是說,使用ARC實際上就是在編譯期間編譯器自動為每個Objective-C指針變數添加合適的retain, release, autorelease等函數,保存每個變數的生存周期控制在合理的範圍內,以期實現代碼上的自動內存管理。

推薦閱讀文章

Bookmark the permalink ,來源:互聯網