關於weak物件什麼時候釋放

2022-08-05 01:51:19 字數 727 閱讀 5790

按照蘋果的程式設計約定,由非alloc,copy返回的物件都是autorelease的,所以對於以下**,雖然變數number__weak的,但是由於[nsnumber numberwithint:100]返回的物件是autorelase的,所以仍然能通過nslog列印出來。12

__weak nsnumber *number = [nsnumber numberwithint:100];

nslog(@"number = %@", number);

從彙編**中看,以上**在建立number變數時,是通過objc_loadweak方法進行的。而根據 clang的官方文件,objc_loadweak方法會retainautorelease這個物件。所以給乙個weak物件賦值,它並不會馬上釋放,而是會放到autorelease pool中,與autorelease pool一起釋放。

如下是objc_loadweak的**示例:12

3id objc_loadweak(id *object)

autorelease 什麼時候釋放

在iphone專案中,大家會看到乙個預設的autorelease pool,程式開始時建立,程式退出時銷毀,按照對autorelease的理解,豈不是所有autorelease pool裡的物件在程式退出時才release,這樣跟記憶體洩露有什麼區別?答案是,對於每乙個runloop,系統會隱式建立...

autorelease 什麼時候釋放

在iphone專案中,大家會看到乙個預設的autorelease pool,程式開始時建立,程式退出時銷毀,按照對autorelease的理解,豈不是所有autorelease pool裡的物件在程式退出時才release,這樣跟記憶體洩露有什麼區別?答案是,對於每乙個runloop,系統會隱式建立...

自動釋放池什麼時候建立,什麼時候銷毀?

自動釋放池什麼時候建立,什麼時候銷毀?執行迴圈結束前會釋放自動釋放池,還有就是池子滿了,也會銷毀。面試題 下面 存在記憶體問題麼?如果存在如何解決?為什麼 void touchesbegan nsset touches withevent uievent event 解題思路 首先根據類方法建立的,...