哪个是声明临时NSString私有变量的更好方法?

时间:2014-01-19 07:16:43

标签: objective-c ios7

参考带有ARC的iOS 7,是否更好地使用temptempByProperty

在.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)。

假设使用=运算符多次覆盖相同的变量,哪一个不会导致内存泄漏?

2 个答案:

答案 0 :(得分:0)

使用属性tempByProperty。编译器会自动为您进行同步。此外,在使用NSStrings时,请使用copy而不是retain来防止保留字符串的可变实例。

另外,看一下这个关于决定何时在属性上使用ivars的好答案:https://stackoverflow.com/a/8329900/244160

答案 1 :(得分:-2)

答案:使用 tempByProperty


  

我读过我们应该在.m文件中声明私有变量。

是的,你应该在.m文件中声明私有变量。建议在IOS4之后使用@property。你可以把非原子,强,弱等...所以使用@property。另一种方法是保留向后兼容性。

  

假设使用=运算符多次覆盖相同的变量,哪一个不会导致内存泄漏?

他们两个都没问题。新的编译器将添加自动释放,所以不要担心内存。但是,只有当财产归其他人所有时,才使用弱。否则,它将在分配后释放。所以在你的情况下,tempByProperty之后将是零(不是你想要的)。

大多数情况下,只有当它是委托属性时才使用弱,而则必须弱。否则,您将保留该属性并导致内存泄漏。这意味着您不拥有该委托。它也可能不会成为你的私有财产。


您可以从Apple开发者那里阅读此EncapsulatingData,以便更好地了解对象的属性。