作者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