Этот вопрос может быть неосновным, но вот проблема, с которой я столкнулся:
Я пытаюсь запустить пример из iPhone SDK, и я столкнулся с нарушением прав доступа. Я проследил какое-то поведение, которое мне кажется подозрительным.
Вот как выглядит класс:
@interface TableViewCell : UITableViewCell {
@private
UILabel *_earthquakeLocationLabel;
UILabel *_earthquakeDateLabel;
UILabel *_earthquakeMagnitudeLabel;
UIImageView *_magnitudeImageView;
}
Когда я устанавливаю точку останова в
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier
И посмотрите на «себя» в отладчике, это показывает, что _earthquakeDateLabel равен «0x12», _earthquakeMagnitudeLabel равен 0x1000, а два других равны нулю. Если я пытаюсь назначить любой из ненулевых, я получаю нарушение прав доступа.
Я предполагаю, что происходит то, что в них есть поддельные значения, и когда я пытаюсь их присвоить, он пытается уменьшить ссылку на поддельное значение и взрывается. Но, как я уже сказал, я довольно новичок в Objective C, так что я могу быть вне базы.
Итак, мой вопрос: есть ли что-то особенное в инициализации этих значений, которые я должен делать? Или каким-либо образом присвоить значение, когда оно содержит поддельное значение?
Некоторая дополнительная информация:
Так что, если я назначу nil для _earthquakeDateLabel и _earthquakeMagnitudeLabel при инициализации, это решит проблему. Но я не понимаю, почему объект создается со значениями в этих полях; Я ожидаю, что они будут нулевыми. Объект создается в куче:
TableViewCell *cell = [[[TableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];