我動態地將子視圖添加到另一個uiview;self removeFromSuperView不釋放自我?
在子視圖,單擊一個按鈕通過下面的方法來回去:
[self removeFromSuperView ];
但經過曼尼次添加子視圖,並刪除它,我的應用程序可能會崩潰,日誌說,被殺害了。
我發現撥打[self removeFromSuperView]
沒有釋放自我。那麼釋放它的最好方法是什麼?
我動態地將子視圖添加到另一個uiview;self removeFromSuperView不釋放自我?
在子視圖,單擊一個按鈕通過下面的方法來回去:
[self removeFromSuperView ];
但經過曼尼次添加子視圖,並刪除它,我的應用程序可能會崩潰,日誌說,被殺害了。
我發現撥打[self removeFromSuperView]
沒有釋放自我。那麼釋放它的最好方法是什麼?
如果您在創建時保留UIView(或將其添加到數組中),則保留計數將增加。例如:
// Retain count is 1
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
// Retain count is 2
[myParentView addSubview:myView];
// Retain count is 1 again
[myView removeFromSuperView];
在上面的例子中,你可以autorelease
視圖如果立即添加作爲一個子視圖或釋放它在你的dealloc如果它是伊娃。
編輯:(其他原因,你的觀點可以保留)
// Retain count +1
[myArray addObject:myView];
// Retained in the setter created by the @synthesize directive
@property(nonatomic, retain) UIView *myView;
中還有其他屬性保留在文件中,指出。
如果確實要釋放它們,您還應該小心在VC的loadView方法中創建對象,因爲它們將在調用loadView時再次創建。如果您的VC視圖已卸載然後重新加載,則會發生這種情況。
我添加子視圖是這樣的: UIView * myView = [[UIView alloc] initWithFrame:myFrame]; [myParentView addSubview:myView];並且在add.because之後不會釋放,當我調用[self removeFromSuperView]時,應用程序有時會崩潰; – 2012-07-14 08:07:16
嗨xxhp,應用程序將崩潰,如果你創建它(保留1),addSubview(保留2),釋放視圖(保留1),從超視圖中刪除(版本0,查看dealloc'd)。 addSubview(崩潰)。聽起來就像你需要使用一個iVar並創建你的視圖,並在你的VC的dealloc中釋放它,如果你想讓它堅持下去,所以你可以添加和刪除superView。如果是這種情況,那麼視圖不會被解除分配,直到你的VC也被解除分配。同樣,你可以在loadView中創建它,並在viewDidUnload中釋放它。希望這有助於,戴夫 – 2012-07-14 09:41:30
謝謝。我會試試這個。 – 2012-07-15 01:17:16
看起來像是將保留視圖添加爲子視圖。其父母的觀點再次保留下來。 所以當你的單元[self removeFromSuperView];
它從superView獲得釋放消息,但仍然必須由創建者釋放。
你應該首先發布。 「alloc」的對應部分是「釋放」,「addSubview」的對應部分是「removeFromSuperView」:保持這些平衡。
add視圖:
UIView *myView = [[UIView alloc] initWithFrame:myFrame];
[myParentView addSubview:myView];
[myView release];
移除View(視圖將在存儲器removeFromSuperView後清理):
[myView removeFromSuperView];
我試過這個,但是app有時會崩潰! – 2012-07-14 08:13:31
後它增加了子視圖到parentview的代碼。 – Apurv 2012-07-13 05:49:22
發佈一些代碼,所以我們可以理解 – Hiren 2012-07-13 06:14:38