這個問題可能是偏離基礎,但這裏是我遇到的問題:如何在Objective C中設置未初始化的值?
我想從iPhone SDK運行一個示例,並且遇到訪問衝突。我追查了一些我認爲可疑的行爲。
這裏的類的樣子:
@interface TableViewCell : UITableViewCell {
@private
UILabel *_earthquakeLocationLabel;
UILabel *_earthquakeDateLabel;
UILabel *_earthquakeMagnitudeLabel;
UIImageView *_magnitudeImageView;
}
當我在
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
設置一個斷點,看在調試器的「自我」,它表明_earthquakeDateLabel是「×12」, _earthquakeMagnitudeLabel是0x1000,另外兩個是零。如果我嘗試分配給任意一個非零的字符,我會遇到訪問衝突。
我在猜測發生了什麼事情,這些都是假的價值觀,當我嘗試分配給他們時,會試圖減少對虛假價值的引用並炸燬。但正如我所說,我對Objective C相當陌生,所以我可能會脫離基地。
所以我的問題是,有什麼特別的初始化這些值,我應該做的?或者有任何方式來分配值時,它有一個虛假的價值?
一些額外的信息:
所以,如果我在初始化分配到零和_earthquakeDateLabel _earthquakeMagnitudeLabel,能解決問題。但我不明白爲什麼用這些字段中的值創建對象;我希望他們是零。對象正在堆上創建:
TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];