我在我的UIView
中創建了一些UILabels
,填充數據,添加它們以查看和釋放它們。從視圖更新/刪除UILables
UILabel *speed = [self scrollLabel:@"some Text" x:455.0f y:75.0f];
[scrollView addSubview:speed];
[speed release];
的方法:
- (UILabel *)scrollLabel:(NSString *)text x:(float)x_ y:(float)y_ {
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x_, y_, 300.0f, 20.0f)];
[label setText:NSLocalizedString(text,@"")];
[label setFont:[UIFont fontWithName:@"Helvetica" size:14]];
[label setTextColor:[UIColor colorWithRed:255.0 green:255.0 blue:255.0 alpha:1.9]];
[label setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.0]];
return label;
}
我有一個按鈕,用戶可以在其中重新加載uilabels的數據。我將從superfiew中移除所有這些標籤的父視圖,生成新數據並再次設置標籤的方法。
問題是,舊的UILabels仍然存在,所以我的問題是,什麼是最好的方法來刪除這個特殊的標籤?
我做了一個循環,並刪除所有子視圖,問題是,我也有一些其他子視圖在那裏,我不想刪除。
另一個問題:是否有更好的方法來設置多個標籤的字體樣式?
感謝您的回答Dimitris。好吧,虐待添加自己的uiview到我的滾動視圖,並通過循環瀏覽這個視圖的兒童刪除它們。謝謝! 你是什麼意思與「你不需要釋放標籤後,你將其添加到UIView」。你的意思是我不必釋放他們,當我在我的方法或一般返回一個autoreleased對象? 如果我還添加新/複製/保留到返回值會有什麼區別?它有一個更大的releasecount然後,好吧,但這是一個優勢在任何方面? – choise 2010-01-29 09:57:57
首先,您的代碼可以正常工作。創建它時保留一個UILabel,並在將其添加到視圖時將其釋放。沒關係,沒有內存泄漏。 你的代碼有什麼不好(但沒有錯,只是不好的做法),是你的方法返回一個保留對象的事實。在Cocoa中,所有返回保留對象的方法在其名稱中都帶有* new *,* copy *或* retain *這樣的名稱,這樣開發人員就會知道他必須自己釋放對象。 (待續) – Dimitris 2010-01-29 11:11:13
(續)所以我只是建議在返回標籤之前自動釋放標籤,或者只是將方法重命名爲' - (UILabel *)scrollLabelCopy:(NSString *)text x:(float)x_ y :(float)y_',以便每次調用它時,都會提醒您返回的對象已保留*)scrollLabelCopy:(NSString *)text x:(float)x_ y:(float)y_' ,這樣每次調用它時,都會提醒您返回的對象已保留。 在Cocoa中開始內存管理時,遵循此約定可能會引起混淆。 – Dimitris 2010-01-29 11:13:13