Должен ли каждый IBOutlet иметь свойство? - PullRequest
4 голосов
/ 01 августа 2011

Мы создаем свойство для переменной для использования в другом представлении.То же самое мы делаем для IBOutlets .Но не всегда для их использования.Нужно ли создавать свойство для каждого IBOutlet, который мы только что создали в нашей xib?Или это хорошая практика?

Ответы [ 6 ]

10 голосов
/ 01 августа 2011

Мне нравится смотреть на это с точки зрения простоты управления памятью и внешнего доступа.Если вам нужен внешний доступ к нему, очевидно, сделайте собственность.(Да облегчить управления памятью, если это легко, вы не испортите это, если не испортите это, это не станет ошибкой позже)

80%Когда у моего контроллера представления есть IBOutlets, и никто другой не обращается к ним, следовательно, ivars работают.Проблема в том, что когда вы не используете @property, назначенное значение все еще сохраняется .Тогда вам нужно помнить, чтобы выпустить его, даже если вы не сохранили его самостоятельно, что я счел нелогичным.

По этой причине я обычно использую @property (assign) для тех, которыми я не будуизменяя и @property (сохраняй) для всего остального, и никогда не объявляй IBOutlets напрямую как ivars.

Пример:

@interface something : NSObject {
    //This one needs to be RELEASED then set to nil in both viewDidUnload, and dealloc.
    IBOutlet UILabel * myLabel;
    //also cannot be accessed outside of "something" class (technically it can, but don't do that)
    //I NEVER declare my outlets this way.
}

//This one can just be set to nil in viewDidUnload and dealloc
@property (nonatomic, retain) UILabel * myOtherLabel;
//it can also be accessed from mySomething.myOtherLabel by any other class.

//This one just works. I don't own it, the view owns it, so I don't retain/release.
@property (nonatomic, assign) UILabel * myOtherOtherLabel;
//It also provides access to outsiders.
//I wouldn't recommend using this type if you want to change the value though.
4 голосов
/ 01 августа 2011

Нет необходимости создавать свойство для каждого IBOutlet.

В частности, если вы получаете доступ к розетке только из класса, в котором она объявлена, вам не требуется строгое свойство. Если у вас есть недвижимость, вы получаете преимущества, которые предлагает недвижимость, но вы всегда можете напрямую обратиться к торговой точке.

Если вы планируете получить доступ к выходу из другого класса, тогда свойство полезно, так что вам не нужно самим определять методы установки и получения.

1 голос
/ 01 августа 2011

Если вы хотите использовать IBOutlet только для вида, для которого вы создали XIB, тогда нет необходимости устанавливать здесь свойство. Но да, рекомендуется использовать, но не обязательно, каждый раз, когда мы создаем IBOutlet для представления.

0 голосов
/ 01 августа 2011

Если вы хотите изменить содержимое вашего дисплея, то вам нужно добавить свойство. Например, если мы хотим изменить текст метки, нам нужно использовать свойство IBOutlet nd, чтобы мы могли иметь возможность добраться до контроль над меткой, который фреймворк будет строить из нашего пера.

0 голосов
/ 01 августа 2011

Свойства - это функция Objective-C, которая позволяет нам автоматически генерировать средства доступа, а также имеет ряд других побочных преимуществ.Так как Praveen S дал вам пример с Label и UIText, я просто немного исследую.Допустим, вы не имеете ничего общего с UILabel, вам не нужно точно устанавливать свойства, но если вы просите пользователя передать какой-то текст на ваш UITextField, вы должны установить свойства.и если вы устанавливаете свойства с помощью retain, вы должны разблокировать его в viewDidUnload.

0 голосов
/ 01 августа 2011

Если то, что вы собираетесь отображать, не изменится, вы можете пропустить создание свойства или IBOutlet для этого виджета.

Например, на экране, где у вас есть метка и текстовое поле, а в метке всегда есть строка «Имя:», а текстовое поле используется для получения ввода от пользователя, вам нужно просто создать ссылочный выход для текстового поля, чтобы получить доступ к данным, вводимым пользователем. Создание ссылочного выхода для метки здесь не имеет никакого смысла.

Надеюсь, вы поняли.

...