我应该在iOS中制作我的ivars属性吗?

时间:2013-05-31 02:35:21

标签: ios properties ivars

当你认为自己理解某事时,你就不会这样做! :)

据我所知,如果我将变量设为属性,我可以在类中的任何位置访问它,甚至可以从该类外部设置它。

我想如果我不需要它,我可以把它变成一个伊娃。所以我有一个大约5个UILabel的viewcontroller。所以在它的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

2 个答案:

答案 0 :(得分:5)

没有。创建ivar作为财产并不是强制性的。如果您不想在课外访问它,请按原样使用。在ARC中,您还可以声明您的IBOutlet如下:

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

这将保留一周的网点参考。以下是__weak and strong

的详细信息

答案 1 :(得分:0)

您可以通过多种方式处理编程任务和标准。我们小组已开始使用一些编码标准。我们喜欢将不在类外部访问的实例变量(和协议语句)放在.m文件的私有接口中,如下所示:

@interface DetailViewController() {
    NSString *value_;
}

@end

我们也希望将@property用于我们的实例ivars,并在私有接口中声明这些,如下所示:

@interface DetailViewController() {
}

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

@end

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