關於 autoreleasepool的測試及使用

2021-07-09 06:19:10 字數 1060 閱讀 6307

- (void)dosomething 

nslog(@"finished!");

}

- (void)dosomething 

}nslog(@"finished!");

}

綜上,當需要在程式中建立大量的臨時變數時(大量也可指數量多,不確定,比如從資料庫中讀取資料時),很容易使記憶體產生峰值又回到記憶體低谷,這樣對程式的效能會產生很大影響,而使用自動釋放池後,峰值明顯有所下降。

原因:由於在mian函式中已經為我們新增了自動釋放池,如下所示:

#import

#import

int main(int argc, char * argv)

}

而當autoreleasepool的右括號結束後,會對整個autoreleasepool做一次傾倒。但是這會使其中區域性產生的大量零時變數無法及時釋放,直到for迴圈結束後抵達main中autoreleasepool的右括號位置才能釋放。這樣會在區域性位置發生記憶體峰值。

官方提出的解決方案是,在大量產生區域性變數的位置用autoreleasepool**塊進行包裝。比如for迴圈中要執行的語句,這樣每次for迴圈結束後就會及時收回臨時變數占用的記憶體空間。

使用mrc下的特性

在編譯選項中,為mrc的程式新增-fno

-objc

-arc標記,表明在編譯時,該檔案使用mrc編譯

如果要在mrc專案中新增arc的檔案,可以使用 -fobjc

-arc 標記即可

這裡的需求我們可以使用mrc時代的乙個重量級的自動釋放池,通常用來建立偶爾需要釋放清空的池。

- (void)dosomething 

}/** 用來傾倒當i的個數不是100的倍數時,比如讀取資料庫資料時,資料總數為不確定值 */

[pool drain];

nslog(@"finished!");

}

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...

關於冷漠,關於愛情

我不知道為什麼今天又莫名其妙開始思考愛情這件事,隨之就解決了我一直無法面對冷漠這件事 被冷漠是我始終無法消化的一件事,每當遇見冷漠時,我總會覺得就像一團火把自己燒得面目全非,但對方卻毫無傷害。但我突然懂了,遇到冷漠時,體面的離開即可 在乎你的人一定會在你離開後,找到你跟你解釋為什麼 連解釋都來不及,...