iphone - 将 NSString 传递给另一个 View Controller 会使应用程序崩溃

标签 iphone objective-c ios extern

我有以下代码,我将 buttonString(NSString)的值传递给另一个 View Controller 。当设置了 buttonString = imageName; 然后在另一个 View Controller 上调用时,应用程序崩溃。

在@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);

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

感谢您的帮助。

最佳答案

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

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

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

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

关于iphone - 将 NSString 传递给另一个 View Controller 会使应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10797390/

相关文章:

iphone - 在 Xcode 控制台中查看 Unicode 字符?

objective-c - Objective C - 后台执行选择器并且分离新线程选择器?

ios - 从 Watch 应用程序调用父应用程序时如何使用文件加密?

ios - UIScreenEdgePanGestureRecognizer 多次触发

ios - 单元格崩溃中的 MKMapView

iphone - 应用程序在 xcode 中释放数组对象时崩溃

iPhone 4 应用程序会在 iPad 上自动扩展吗?

ios - 输入输出字符串函数

iphone - 处理 Objective-C 中的空结构(自定义类中的坐标)

iphone - 如何截取整个 View 的 iPhone 屏幕截图,包括屏幕外的部分?