亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

NSAutoreleasePool自動釋放池如何工作?

NSAutoreleasePool自動釋放池如何工作?

喵喵時光機 2019-12-17 15:10:50
據我了解,使用alloc,new或copy創建的任何內容都需要手動釋放。例如:int main(void) {    NSString *string;    string = [[NSString alloc] init];    /* use the string */    [string release];}我的問題是,這樣難道不是同樣有效嗎?:int main(void) {    NSAutoreleasePool *pool;    pool = [[NSAutoreleasePool alloc] init];    NSString *string;    string = [[[NSString alloc] init] autorelease];    /* use the string */    [pool drain];}
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

是的,您的第二個代碼段是完全有效的。

每次將-autorelease發送給對象時,都會將其添加到最內部的autorelease池中。當池耗盡時,它僅向池中的所有對象發送-release。

自動釋放池只是一種便利,它使您可以將發送-發送推遲到“以后”。“稍后”可能會在多個地方發生,但是在Cocoa GUI應用程序中最常見的是當前運行循環周期的結尾。


查看完整回答
反對 回復 2019-12-17
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

NSAutoreleasePool:消耗與釋放

由于功能drain和release似乎是造成混亂,它可能是值得澄清這里(雖然這是覆蓋在文檔 ...)。


嚴格地說,從大局的角度drain是不等同于release:


在引用計數的環境中,drain確實執行與相同的操作release,因此兩者在此意義上是等效的。要強調的是,這意味著您使用而不是不會泄漏池。drainrelease


在垃圾收集的環境中,release禁止操作。因此,它沒有任何作用。 drain另一方面,向收集器暗示它應該“根據需要收集”。因此,在垃圾收集環境中,使用drain有助于系統平衡收集掃描。


查看完整回答
反對 回復 2019-12-17
  • 3 回答
  • 0 關注
  • 613 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號