Что значит объявить IBOutlet в @interface?

Что значит объявить IBOutlet в @interface, а не нет? В простом тесте задание работает в любом случае.

@interface MyViewController : UIViewController <UITextFieldDelegate> {

    IBOutlet UITextField *textField;
    IBOutlet UILabel *label;
    NSString *string;
    /*IBOutlet*/ UILabel *total;//What does it mean to declare IBOutlet here?
}

@property (nonatomic, retain) IBOutlet UILabel *total;

.h

@synthesize total;
total.text = @"23";

person P.Brian.Mackey    schedule 27.06.2012    source источник
comment
Это позволяет вам использовать объявленный элемент в Interface Builder (IB = Interface Builder)   -  person StackOverflowed    schedule 27.06.2012
comment
Как это так? Как я уже говорил в OP, я могу использовать объявленный элемент в IB с ним или без него.   -  person P.Brian.Mackey    schedule 27.06.2012


Ответы (3)


Это означает, что ivar будет IBOutlet. Точно так же, как ваша текущая собственность — это IBOutlet.

Вы совершаете большую ошибку, называя свой ивар и собственность одним и тем же.

total.text и self.total.text в вашем файле — это не одно и то же.

person Ryan Poolos    schedule 27.06.2012
comment
Где я должен исправить ошибку свойства? Вы имеете в виду, что я создаю новую переменную, когда я вызываю @synthesize? Детские слова, пожалуйста, я все еще работаю над hello world для iphone. - person P.Brian.Mackey; 27.06.2012
comment
обычной практикой является называть вашу собственность total, а ваш ivar _total, чтобы вы не могли их перепутать. Вы можете сделать что-то вроде @property (nonatomic, retain) IBOutlet UILabel *total; и @synthesize total = _total; И вы можете вообще избавиться от объявления интерфейса в этом случае. - person Ryan Poolos; 27.06.2012

Термин IBOutlet является только заполнителем для Xcode. С его помощью Xcode помогает вам связать переменную экземпляра с графическим элементом.

Вот мой предыдущий старый ответ на него: Проблема управления памятью iOS.

Посмотри. Он охватывает много вещей.

Я также предлагаю прочитать nib-memory -менеджмент Майк Эш.

Надеюсь, это поможет.

person Lorenzo B    schedule 27.06.2012

Однако для IB нет никакой разницы, если ваша собственность на месте, ваша UILabel сохраняется, и вы должны освободить ее (если вы не используете ARC). Если вы не используете @property, лейбл вам не принадлежит, и вам не нужно его освобождать.

person JustSid    schedule 27.06.2012