代码之家  ›  专栏  ›  技术社区  ›  Anonymous

避免@property itis(即过度使用属性,何时合适)?

  •  9
  • Anonymous  · 技术社区  · 17 年前

    • 它们允许声明式编程。
    • @synthey和@dynamic机制免除了编写重复的股票访问器。

    我听到的不是这个问题。与任何新功能一样,最初的趋势是希望在任何地方都使用@property。那么,物业使用在哪里合适呢?

    显然,在模型对象中,属性和关系是属性的良好素材。

    @property(...) NSString *firstName;
    @property(...) NSString *lastName;
    @property(...) Person *parent;
    

    即使是合成/计算属性看起来也是一个很好的属性用例。

    @property(...) NSString *fullName;
    

    您是否将属性用于私有对象属性?

    你能想出可可中不属于属性的东西的例子吗?乍一看,这些东西似乎是想要成为属性的,但经过仔细观察,它们是滥用还是属性的例子呢?

    3 回复  |  直到 17 年前
        1
  •  7
  •   wisequark    17 年前

    我对人们的建议是尽可能使用房产。如果您在一个框架中工作,那么在现代运行时使用非脆弱实例变量的能力是一个巨大的好处,如果您没有,那么属性可以清楚地说明如何管理ivar(分配的ivar与保留的ivar与复制的ivar)。声明一个属性不会带来固有的性能损失,除了编写代码行所需的时间(我实际上使用了一个TextExpander代码片段来完成这项工作)之外,但是防止错误的可能性足够大,因此它成为一个极好的最佳实践。如果计划使用私有ivar的属性,可以在实现文件中通过 @interface 封锁。例如

    @interface MyObject()
    
    @property(retain) NSArray *myArray;
    
    @end
    
        2
  •  5
  •   benzado    17 年前

    如果我不得不想一个避免它们的原因,我会说,在计算量很大的情况下,不要将它用于计算属性。属性鼓励如下代码:

    if (foobar.weight > 100) {
        goober.capacity = foobar.weight;
    }
    

    foobar.weight 被调用两次。如果只是返回一个缓存值,没问题。但如果每次在部署机器人时需要阻塞线程来手动称重foobar,那么上面截取的代码将浪费两个机器人部署,而只需要一个。

    int w = [foobar computeWeight];
    if (w > 100) {
        goober.capacity = w;
    }
    

    名字像 computeWeight 更容易记住这是一个长期运行的操作。

        3
  •  0
  •   Marc Charbonneau    17 年前

    stringValue 因为这个原因我决定不做一个属性的方法。不过,这其实更多的是风格问题。