內的初始化方法,我有以下的代碼非保留對象:何時被釋放?
- (id)init {
self = [super init];
if (self) {
UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
tempButton.frame = CGRectMake(0,0,300,44);
// some custom code...
self.myButton = tempButton;
}
return self;
}
凡myButton
是保留的財產。 我知道,對於所關注的內存管理規則,這種方法等於這個其他:
- (id)init {
self = [super init];
if (self) {
UIButton *tempButton = [[UIButton alloc] initWithFrame:CGRectMake(0,0,300,44)];
// some custom code...
self.myButton = tempButton;
[tempButton release];
}
return self;
}
但在這種情況下,我需要使用的第一個「版本」,因爲buttonType
屬性爲只讀後,我不能改變它使按鈕失去活力。
因爲我發現自己在我的應用程序和多個對象(其中大部分是NSString
)的多個方法中使用「非init-release」版本,我的問題是:不計算在這種情況下,分配給屬性保留的對象,何時tempButton
對象將被釋放?也許在方法/ if語句的末尾?或者,第一個「版本」會導致內存使用量增加,因爲該對象不會立即被釋放,而是在一段時間之後?
唉,我錯過了運行循環部分。你有可能對「運行循環的當前迭代」更精確嗎?那個迭代與單一方法或更長的時間相關,也許是固定的時間?可能是整個應用程序的生命週期?我試着通過閱讀教程來了解更多,但沒有人明確地解釋這一點。 – 2012-02-15 00:19:02
「運行循環的當前迭代」實際上與我所能達到的一樣精確。運行循環是Cocoa中的事件處理循環。如果您想了解更多信息,請點擊以下博客文章:http://blog.shinetech.com/2009/06/02/run-loops-vs-threads-in-cocoa/ – yuji 2012-02-15 00:26:12