我应该在iOS中创建我的ivars属性吗?

问题描述:

就在你认为自己明白某事的时候,你不会! :)我应该在iOS中创建我的ivars属性吗?

据我所知,如果我做一个变量属性,我可以在类的任何地方访问它,甚至可以从该类之外设置它。

我想如果我不需要它,我可以把它做成一个伊娃。所以我有一个约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

号它不是强制性的创建伊娃财产。如果你不想在课堂以外访问它,就照原样使用它。在ARC中,您还可以声明您的IBOutlet如下:

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

这将保留一个星期参考网点。这里是详细的__weak and strong

总是有很多方法可以处理编程任务和标准。我们的小组已经开始使用一些编码标准。我们喜欢把不是从类的外部访问我们的实例变量(和协议语句)的专用接口的.m文件是这样的:

@interface DetailViewController() { 
    NSString *value_; 
} 

@end 

我们也喜欢用@property我们的实例的ivars和声明那些在专用接口,以及这样的:

@interface DetailViewController() { 
} 

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

@end 

,然后在你的代码,你会将此称为self.pharmacyName。对于自动完成,以及获取和设置,它似乎工作得很好。此外,当你遇到线程安全问题时,非原子性强的行为就派上用场了。

+0

是的,我使用了与ivars vs properties相同的协议。那么除了我不使用_与伊娃。但问题是由于某些原因,这些值没有设置。所以我想知道它是否与我没有使它们属性有关。 – marciokoko

+0

这可能是一个愚蠢的问题,但是你是否将ivars链接到xib文件中的按钮(这是我最喜欢的方法之一,使我的程序无法工作) – HalR