看板 MacDev 關於我們 聯絡資訊
最近在看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
Gsus:會不會是bubbleView其他地方還要用到,所以就先不release? 01/04 12:57
shelary:因為你等一下還要去改變泡泡(bubbleView)的位置丫。 01/04 18:07
kevwalker:那再請問被addSubview產生的retaincount是由誰release? 01/04 19:29
aecho:因為你addSubView了,當self在解構時,會把所有的child view 01/04 22:29
aecho:都release掉。 01/04 22:29
aecho:跟NSArray是一樣的道理,NSArray解構時會把他持有的NSObject 01/04 22:30
aecho:,都呼叫release,然後retain count就會-1 01/04 22:30
kevwalker:懂了 感謝 01/04 23:18