参考带有ARC的iOS 7,是否更好地使用temp
或tempByProperty
?
在.m文件中:
@interface ViewController ()
@property (weak) NSString *tempByProperty;
@end
@implementation ViewController
NSString *temp;
- (void)viewDidLoad
{
[super viewDidLoad];
temp = @"string1";
temp = @"string2";
self.tempByProperty = @"string1";
self.tempByProperty = @"string2";
}
我读过我们应该在.m文件中声明私有变量。但似乎有两种方式来声明它们(有和没有@property
)。
假设使用=
运算符多次覆盖相同的变量,哪一个不会导致内存泄漏?
答案 0 :(得分:0)
使用属性tempByProperty
。编译器会自动为您进行同步。此外,在使用NSStrings时,请使用copy
而不是retain
来防止保留字符串的可变实例。
另外,看一下这个关于决定何时在属性上使用ivars的好答案:https://stackoverflow.com/a/8329900/244160
答案 1 :(得分:-2)
答案:使用 tempByProperty 。
我读过我们应该在.m文件中声明私有变量。
是的,你应该在.m文件中声明私有变量。建议在IOS4之后使用@property。你可以把非原子,强,弱等...所以使用@property。另一种方法是保留向后兼容性。
假设使用=运算符多次覆盖相同的变量,哪一个不会导致内存泄漏?
他们两个都没问题。新的编译器将添加自动释放,所以不要担心内存。但是,只有当财产归其他人所有时,才使用弱。否则,它将在分配后释放。所以在你的情况下,tempByProperty之后将是零(不是你想要的)。
大多数情况下,只有当它是委托属性时才使用弱,而则必须弱。否则,您将保留该属性并导致内存泄漏。这意味着您不拥有该委托。它也可能不会成为你的私有财产。
您可以从Apple开发者那里阅读此EncapsulatingData,以便更好地了解对象的属性。