Как объявить объектные переменные для хорошей структуры кода цели C

-6

Я знаю, что мой вопрос глупо, но мне нужно знать это для дальнейшего развития. Я разрабатываю iPhone application программно, не используя xib and storyboard, поскольку я объявил несколько object variables как xib and storyboard ниже

    UINavigationController *navigationController;
UIActivityIndicatorView *activityIndicator;
UIImageView *splashImage;
NSTimer *checkJSONtimer;
UILocalNotification *localNotification;
NSUserDefaults * defaults;

@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) Login *loginView;
@end

Выше кода В .h file был объявлен. Теперь мой вопрос - это некоторые из UIObjects declared без @property и некоторая variable мы объявляем со properties и attributes. Какие Objects UI and NS, как объявить двумя способами выше.

Какой из них - правильный способ programming и хорошего?

спросил(а) 2020-04-04T00:09:21+03:00 5 месяцев, 4 недели назад
1
Решение
107

К комментариям:

Существует мало оснований объявлять ivars (переменные экземпляра, то, что вы назвали объектными переменными) в заголовке. Это было необходимо в прошлом (годы назад), но это не так. С другой стороны объявленные свойства (@property) добавляют семантическую информацию пользователю API класса.

Поэтому в вашем интерфейсе не должно быть никаких иваров.

Однако есть некоторые причины, чтобы объявить ivars явно после объявления объявленного свойства. Вы должны сделать это в продолжении класса (расширение) следующим образом:

@interface MyClass()
{
id _ivar;
}

Я предпочитаю объявлять ivars в реализации, когда это возможно. (Большинство разработчиков не знают об этой способности.)

@implementation MyClass
{
id _ivar;
}

Если идентификатор ivar соответствует идентификатору объявленного свойства плюс _, сгенерированный код будет использовать этот ivar в обоих вариантах.

ответил(а) 2020-04-04T00:25:24.138986+03:00 5 месяцев, 4 недели назад
41

Вы определенно должны прочитать документацию. Но очень короткий ответ заключается в том, что свойства дают вам получатели и сеттеры бесплатно. (НО ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ DOCS, это намного больше, чем просто и возможно). Когда вы определяете @property, вам больше не нужно определять переменную (в прошлом вы должны были на самом деле). Обычно вы хотите просто использовать свойства.

ответил(а) 2020-04-04T00:09:21+03:00 5 месяцев, 4 недели назад
41

В файле заголовка *.h вы должны поместить глобальные свойства, которые вы хотите получить из других классов при создании экземпляра класса объекта. Для этого вам следует использовать @property.

Если вы хотите, чтобы свойства локального объекта просто разместили ваш @property внутри @interface в файле *.m:

@interface Class()
@property NSTimer *yourTimer;
@end

Для локальных переменных объекта вы можете разместить их внутри @implementation в файле *.m:

@implementation Class {
int timeToWaitInMillisseconds;
}

Дальнейшее чтение: http://rypress.com/tutorials/objective-c/properties

ответил(а) 2020-04-04T00:09:21+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема