我将下面的代码传递到另一个视图控制器的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
,则该应用程序不会崩溃。谢谢你的帮助。
最佳答案
发生这种情况是因为buttonString
指向释放的对象。
从您的代码段中,imageName是一个自动发布的NSString。当您说buttonString = imageName;
时,它只是将buttonString
指向与imageName
相同的地址。此方法结束后,imageName
被释放,buttonString
指向的内存也被释放。
这就是为什么当您在NSLog中引用buttonString
时应用程序崩溃的原因。
理想情况下,您不应该在目标C中使用像这样的全局变量共享数据。但是,如果您只是想进行这项工作,则需要在第一次使用buttonString
时为其分配内存。确保稍后不再使用它时将其释放。
注意:这仍然是做事的坏方法。