2010-07-19 70 views
1

我有已申报财产和被分配在视图初始化一个NSString做了如下负荷:实例变量超出作用域

NSString *textWithKey; 
@property(nonatomic,retain)NSString *textWithKey; 

中的.mi有

@synthesize textWithKey; 

和在viewDidLoad中我有

self.textWithKey=[[NSString alloc]init]; 
    [email protected]""; 

现在的地方在我的代码我使用

self.textWithKey=[self.textWithKey stringByAppendingString:text1]; 

它工作正常直到另一个方法被称为返回不同的值。 从那里再次调用这个perticularline,但调试器显示textWithKey超出范围。我没有发布textWihKey任何地方。

+0

首先''self.textWithKey = [[NSString alloc] init];'因为下一行是完全不必要的......至于你的问题 - 你能发布“另一种方法”代码吗?此外,如果您将遍历所有使用'textWithKey'的地方并发布该行,这将有所帮助。 – 2010-07-19 12:24:23

回答

0

是的没错。你没有释放它。但你也没有分配它。 ;-)起初你叫self.textWithKey = [[NSString alloc] init]。比你拨打self.textWithKey = @""。由于您使用属性设置器,每次都会释放旧的分配值。请尝试以下操作:

self.textWithKey = [[NSString alloc] initWithString:@""]; 

因为

self.textWithKey = @""; 

相同

self.textWithKey = [NSString stringWithString:@""]; 

有你不分配任何东西。 ;-)

+0

这不是事实。 '@“”'快捷键和'[NSString string ...]'版本都会返回已经分配的自动释放对象。由于它们是自动发布的,因此它们不需要明确的发布。 – 2010-07-19 12:52:19

+0

确实如此。我试过你的代码,它对我来说工作得很好。谢谢 – 2010-07-19 13:08:41

+0

是的,这是正确的丹雷。我说错了。你需要分配内存。但是你不用手,你会得到一个自动释放的字符串。你是对的。 – 2010-07-19 13:21:26

0

超出范围的变量与发布时不一样。