将NSString传递给另一个视图控制器会导致应用程序崩溃

时间:2012-05-29 10:32:16

标签: iphone objective-c ios extern

我有以下代码,我将buttonString(一个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,则应用不会崩溃。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这是因为buttonString指向已发布的对象。

在您的代码段中,imageName是一个自动释放的NSString。当您说buttonString = imageName;时,它只会将buttonString指向与imageName相同的地址。此方法结束后,imageName将被释放,buttonString指向的内存也将被释放。

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

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