2013-05-31 2 views
0

Просто, когда вы думаете, что понимаете что-то, вы этого не делаете! :)Должен ли я создавать свои свойства ivars в iOS?

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

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

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 
+0

Что случилось с этим изменением? Оба варианта в порядке; вы можете сделать переменные/свойства «слабыми» под ARC. – dasblinkenlight

+0

В чем ваш вопрос? – rmaddy

ответ

5

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

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

Это будет хранить недельные ссылки на торговые точки. Вот подробные данные __weak and strong

0

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

@interface DetailViewController() { 
    NSString *value_; 
} 

@end 

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

@interface DetailViewController() { 
} 

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

@end 

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

+0

Да, я использую тот же протокол работы с ivars vs properties. Хорошо, кроме того, что я не использую _ с иваром. Но проблема в том, что значения почему-то не установлены. Поэтому мне было интересно, не связано ли это с тем, что я не сделал их свойствами. – marciokoko

+0

Это может быть глупый вопрос, но вы связываете ivars с кнопками в вашем xib-файле (это один из моих любимых способов сделать мою программу неработоспособной) – HalR

Смежные вопросы