作者kevwalker (2A3C好聲好好聽)
看板MacDev
標題[問題] iPhoneSDK: subview release的問題
時間Mon Jan 4 12:35:20 2010
最近在看iphoneSDK的sample code
其中有一個是水平儀的sample
裡面有個LevelView的class
在LevelView.h裡有幾個UIImageView
UIImageView *bubbleView;
UIImageView *upDownArrowsView;
UIImageView *downUpArrowsView;
在LevelView.m裡,這些UIImageView被初始化,如:
bubbleView = [[UIImageView alloc] initWithImage:
[UIImage imageNamed:@"bubble.png"]];
(bubbleView retainCount = 1)
然後被加到LevelView裡
[self addSubview:bubbleView];
(bubbleView retainCount = 2)
最後在dealloc()裡,bubbleView被release
[bubbleView release];
那這時bubbleView的retainCount是1,對嗎?
那怎麼變0呢?
是在[super dealloc]時,LevelView的super class(UIView)把它清掉的嗎?
另外,有些UIImageView沒有出現在LevelView.h
而是直接在.m宣告,如:
UIImageView *levelFrontView = [[UIImageView alloc] initWithImage:
[UIImage imageNamed:@"levelBackground.png"]];
[self addSubview:levelFrontView];
[levelFrontView release];
它被加到LevelView後,就把它release了
(我想也是,因為在dealloc()裡沒法release它 )
想請教的是
剛剛前面那一個bubbleView,為什麼不在addSubview之後就release它
而要等到dealloc才release呢?
這兩者間有什麼差別?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.120.62
1F:推 Gsus:會不會是bubbleView其他地方還要用到,所以就先不release? 01/04 12:57
2F:→ shelary:因為你等一下還要去改變泡泡(bubbleView)的位置丫。 01/04 18:07
3F:→ kevwalker:那再請問被addSubview產生的retaincount是由誰release? 01/04 19:29
4F:→ aecho:因為你addSubView了,當self在解構時,會把所有的child view 01/04 22:29
5F:→ aecho:都release掉。 01/04 22:29
6F:→ aecho:跟NSArray是一樣的道理,NSArray解構時會把他持有的NSObject 01/04 22:30
7F:→ aecho:,都呼叫release,然後retain count就會-1 01/04 22:30
8F:→ kevwalker:懂了 感謝 01/04 23:18