ARC中的私有属性与实例变量

时间:2013-07-10 15:44:00

标签: ios properties automatic-ref-counting private instance-variables

为iOS应用启用ARC,如果我希望某个类拥有私有值/对象,最好声明一下:

// .m file
@interface MyClass ()
@property (strong, nonatomic) NSString *name;
@end

或者这个?:

@implementation MyClass
{
   NSString *name;
}

我应该考虑哪些内存管理?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用任何一种方法。在第一种情况下,您宣布私有财产 - 这有一些好处。例如,您可以在其他地方公开该私有接口(例如:在单元测试中)并访问您的某些类的内部。另外,作为一个属性,你可以控制指针是弱还是强。在第二种情况下,您要为您的类声明一个ivar(实例变量),只能从您的类的方法中访问它。

答案 1 :(得分:0)

您应该始终使用属性。我知道使用ARC使用ivar似乎等于使用​​属性,但它不是!!!!
属性有很多选项,其中一个非常重要的是原子/非原子。在堆栈上引用另一个answer

  

使用“原子”,合成的setter / getter将确保整体   值始终从getter返回或由setter设置,   不管任何其他线程的setter活动。也就是说,如果是线程   A在getter的中间,而线程B调用setter,a   实际可行的价值 - 一个自动释放的对象,很可能 - 将是   返回给A的来电者。

另一个非常重要的是copy如果您复制一个对象,您可以确定(几乎)此对象从您传入的时间开始没有变化。

我喜欢属性,因为它们是方法,你可以覆盖它们。有时当我编写GUI元素时,我只想公开像“text”这样的属性。使用覆盖的设置器,您可以将“文本”直接传递给它应该显示的标签或文本字段。
Propeties给你带来很多好处,自从新版本的Xcode自动创建了ivar。