Должен ли я сделать свои свойства ivars в iOS?

Просто когда ты думаешь, что понимаешь что-то, ты не понимаешь!:)

Я понимаю, что если я сделаю переменную свойством, я могу получить к ней доступ в любом месте класса и даже установить его вне этого класса.

Я подумал, что если мне это не понадобится, я могу просто сделать его иваром. Итак, у меня есть viewcontroller с 5 UILabels. Поэтому в его представлении DidLoad я говорю:

pharmacyName.text = self.receivedLocation.name;
    pharmacyTel1.text = @"556-7843";
    pharmacyTel2.text = @"991-2345";
    pharmacyTel3.text = @"800-0001";

Когда я объявил их так в файле.h:

@interface DetailViewController : UIViewController{
    IBOutlet UILabel *pharmacyName;
    IBOutlet UILabel *pharmacyTel1;
    IBOutlet UILabel *pharmacyTel2;
    IBOutlet UILabel *pharmacyTel3;
}

@property (nonatomic,strong) MyLocation *receivedLocation;

@end

2 ответа

Решение

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

@interface DetailViewController : UIViewController{
    __weak IBOutlet UILabel *pharmacyName;
    __weak IBOutlet UILabel *pharmacyTel1;
    __weak IBOutlet UILabel *pharmacyTel2;
    __weak IBOutlet UILabel *pharmacyTel3;
}

Это будет держать неделю ссылки на торговые точки. Вот деталь __слабого и сильного

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

@interface DetailViewController() {
    NSString *value_;
}

@end

Мы также хотели бы использовать @property для нашего экземпляра ivars и объявите их в приватном интерфейсе так:

@interface DetailViewController() {
}

@property (nonatomic, strong) IBOutlet UIlabel *pharmacyName;

@end

а затем в вашем коде, вы бы назвали это self.pharmacyName, Кажется, что он работает очень хорошо с автозаполнением, а также с получением и настройкой. Также, когда у вас есть проблемы с безопасностью потоков, неатомичное, сильное поведение оказывается полезным.

Другие вопросы по тегам