代码之家  ›  专栏  ›  技术社区  ›  bentford Marko Hlebar

仅仅为了内存管理的好处而将@properties用于私有变量是“坏”的吗?

  •  9
  • bentford Marko Hlebar  · 技术社区  · 15 年前

    为私有变量创建@properties,仅仅是为了内存管理的好处,这样做不好吗?

    对于许多私有变量,使用面向公共的@properties似乎既混乱又错误。

    (主要是,在内存不足的情况下,我使用各自的“事件”方法释放私有IVAR。)

    例子: 我通常这样做是为了发布一个私有的IVAR:

    [name release]; name = nil;
    

    但有了@properties,我可以做到:

    self.name = nil;
    

    稍后在我的代码中,将执行此操作,因此需要设置为nil:

    if( !name)
        name = [[NSString alloc] initWithFormat:@"Hi %@",inputName];
    
    3 回复  |  直到 15 年前
        1
  •  23
  •   andyvn22    15 年前

    另一种选择是保持私有财产。可以使用以下代码(在.m文件中)使属性仅在类中可访问:

    #import "MyClass.h"
    
    @interface MyClass ()
        @property (retain) NSString* privateString; 
    @end
    
    @implementation MyClass
    
        @synthesize privateString;
        // Your code here
    
    @end
    

    现在您已经获得了一个属性的易用性,但是其他类仍然无法访问它,即使它们导入了.h文件!

        2
  •  2
  •   NSResponder    15 年前

    为了您的方便而存在属性。如果您不希望其他人使用您的类中存在的属性,就不要记录它们。

        3
  •  0
  •   Tom Dalling    15 年前

    对于公共属性,我不认为苹果建议这样做,因为有时将属性设置为nil可能会产生副作用,而不仅仅是释放变量(kvo通知或执行其他操作的自定义setter方法)。

    至于私有财产,我不太确定。使用一个属性只会在编码时节省几个键的笔画,但同时也会使它稍微复杂和脆弱一些。我喜欢可读性和可维护性,而不是编写方便性,因为从长远来看,您可以节省时间。