0

我有以下代码,我将 buttonString (an NSString) 的值传递给另一个视图控制器。应用程序在设置时崩溃buttonString = imageName;,然后在另一个视图控制器上调用。

在@interface之前的FirstViewController的.h文件中:

extern NSString* buttonString;

在实现前FirstViewController的.m文件中:

NSString* buttonString = nil;

这是代码:

NSString *imageName = [NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ];
NSLog(@"imageName is %@", imageName);

[buttonImage setImage:[ImgUtil image:imageName]];

buttonString = imageName;

NSLog(@"buttonString %@", buttonString);

问题出现在SecondViewController调用时:

NSLog(@"button Message is %@", buttonString);

buttonString = imageName;如果我从中删除, FirstViewController则应用程序不会崩溃。

谢谢你的帮助。

4

1 回答 1

3

发生这种情况是因为buttonString指向一个已释放的对象。

从您的代码段中,imageName 是一个自动发布的 NSString。当您说它buttonString = imageName;只是指向buttonStringimageName. 此方法结束后,被释放,指向imageName的内存也被释放。buttonString

这就是当您buttonString在 NSLog 中引用时应用程序崩溃的原因。

理想情况下,您不应该在 Objective C 中使用像这样的全局变量来共享数据。但是如果您只想完成这项工作,您需要在buttonString首次使用时分配内存。确保在以后没用时释放它。 注意:这仍然是一种糟糕的做事方式。

于 2012-05-29T10:48:32.330 回答