【问题标题】:Should I make my ivars properties in iOS?我应该在 iOS 中创建我的 ivars 属性吗?
【发布时间】:2013-05-31 02:35:21
【问题描述】:

当你认为你理解某事时,你没有! :)

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

我想如果我不需要它,我可以把它变成一个 ivar。所以我有一个带有大约 5 个 UILabel 的视图控制器。所以在它的 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

【问题讨论】:

  • 这个改动有什么问题?两个选项都可以;您可以在 ARC 下使变量/属性“弱”。
  • 你有什么问题?

标签: ios properties ivars


【解决方案1】:

没有。将 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的详细信息

【讨论】:

    【解决方案2】:

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

    @interface DetailViewController() {
        NSString *value_;
    }
    
    @end
    

    我们也喜欢将@property 用于我们的实例 ivars 并在私有接口中声明它们,如下所示:

    @interface DetailViewController() {
    }
    
    @property (nonatomic, strong) IBOutlet UIlabel *pharmacyName;
    
    @end
    

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

    【讨论】:

    • 是的,我使用相同的协议来处理 ivars 与属性。好吧,除了我不将 _ 与 ivar 一起使用。但问题是由于某种原因没有设置这些值。所以我想知道这是否与我没有将它们设为属性这一事实有关。
    • 这可能是一个愚蠢的问题,但你是否将 ivars 链接到你的 xib 文件中的按钮(这是我最喜欢的让我的程序无法工作的方法之一)
    猜你喜欢
    • 2010-12-28
    • 2012-05-06
    • 2011-12-24
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    相关资源
    最近更新 更多