这个问题可能是偏离基础,但这里是我遇到的问题:如何在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];