我不能相信我会问这个问题,但我对这个可变的东西非常疯狂。
我想保存用户名信息。我在我的视图加载时加载它们。在此之后,当我点击按钮时,我将获得信息。
这是我的代码:
@interface SelfViewController : UIViewController
{
NSString *usernameString;
}
- (void)viewDidLoad
{
usernameString = @"test";
}
- (IBAction)goToProfileButtonPressed:(id)sender
{
NSLog(@"%@", usernameString); //CRASH BAD EXEC
}
我错了什么????
答案 0 :(得分:1)
将.h文件更改为:
@interface SelfViewController : UIViewController {
NSString *usernameString;
}
@property (retain, nonatomic) NSString *usernameString;
然后在你的.m文件中:
@synthesize usernameString;
- (void)viewDidLoad {
self.usernameString = @"test";
}
- (IBAction)goToProfileButtonPressed:(id)sender {
NSLog(@"%@", self.usernameString); // "self." can be omitted, but it is best practice not to
}
- (void)dealloc {
[usernameString release];
[super dealloc];
}
问题是您将usernameString
分配给自动释放的字符串对象。按下按钮时,usernameString
已被释放并成为垃圾记忆。通过保留它(并随后在-dealloc
中释放它以避免泄漏),您知道它不会过早释放。
答案 1 :(得分:0)
您需要合成ivar并将其添加为属性。 (对于非ARC编译):
中的.h:
@interface SelfViewController : UIViewController
{
NSString *usernameString;
}
@property (nonatomic, retain) NSString *usernameString;
<。>中的:
@synthesize usernameString;