按照蘋果的程式設計約定,由非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
方法會retain
並autorelease
這個物件。所以給乙個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 解題思路 首先根據類方法建立的,...