为iOS应用启用ARC,如果我希望某个类拥有私有值/对象,最好声明一下:
// .m file
@interface MyClass ()
@property (strong, nonatomic) NSString *name;
@end
或者这个?:
@implementation MyClass
{
NSString *name;
}
我应该考虑哪些内存管理?
谢谢!
答案 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。