是否有在Xcode中创建存储变量的最佳实践?

时间:2012-05-14 13:50:16

标签: xcode variables initialization

我想知道是否有人能告诉我首先创建局部变量的好处,而不是直接初始化存储的变量。见下面的例子:

example.h文件

NSString *exampleString;

@property (nonatomic, retain) NSString *exampleString;

Example.m

@synthesize exampleString;

方法1(直接初始化)

self.exampleString = [NSString stringWithString:@"Example"];

方法2(本地初始化)

NSString *example = [NSString stringWithString:@"Example"];
self.exampleString = example;
[example release];

我在我的代码中使用了这两种类型,但是没有注意到任何直接的差异,但是当我查看大多数编码示例时,他们使用方法2.我只是想知道两者之间是否存在实际差异?

先谢谢了, 埃利奥特

3 个答案:

答案 0 :(得分:1)

对于你只使用过一次的情况,我想不出来。事实上,你的例子指出了一个问题,如果它存在,有人可能会试图过度释放它。 :)

实际上,self.exampleString = @"Example";比其中任何一个都更容易阅读。

答案 1 :(得分:0)

在方法2中,您不应释放example变量,因为您没有创建它也不保留它。看看这个: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

除了这个问题,两种方法之间没有区别。在我看来,方法1更清晰,因为你不需要额外的变量。

答案 2 :(得分:0)

第二种方法错了!您正在发布已经自动释放的对象。您没有示例字符串,因为您没有调用init或retain。然后你不需要发布它,否则它可能会使你的应用程序崩溃。第二种方法的正确版本是:

NSString *example = [[NSString alloc] initWithString:@"Example"];
self.exampleString = example;
[example release];

这和你的第一个方法的区别在于,你没有自动释放的对象。初始化一个字符串,将其分配(并保留)到您的实例变量,然后释放它。在第一个方法中,stringWithString将创建一个自动释放的对象,该对象将在未来的某个时间释放(通常在循环结束时)。在那之前,它是在记忆中(并浪费它)。特别是对于(很多)大型物体,你应该避免这种情况。