我的iOS应用程序中的变量?
我不敢相信我在问这个问题,但我对这些变化无常的东西非常着迷 我想保存一个用户名信息。我以我的观点来载入它们。在此之后,我将在单击按钮时获得信息 这是我的密码:我的iOS应用程序中的变量?,ios,nsstring,Ios,Nsstring,我不敢相信我在问这个问题,但我对这些变化无常的东西非常着迷 我想保存一个用户名信息。我以我的观点来载入它们。在此之后,我将在单击按钮时获得信息 这是我的密码: @interface SelfViewController : UIViewController { NSString *usernameString; } - (void)viewDidLoad { usernameString = @"test"; } - (IBAction)goToProfileBut
@interface SelfViewController : UIViewController
{
NSString *usernameString;
}
- (void)viewDidLoad
{
usernameString = @"test";
}
- (IBAction)goToProfileButtonPressed:(id)sender
{
NSLog(@"%@", usernameString); //CRASH BAD EXEC
}
我做错了什么???您需要合成ivar并将其添加为属性。(对于非圆弧编译): 在.h中:
@interface SelfViewController : UIViewController
{
NSString *usernameString;
}
@property (nonatomic, retain) NSString *usernameString;
在.m中:
@synthesize usernameString;
将.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
中释放它以避免泄漏),您知道它不会过早释放。您应该合成iVar并生成属性。由于未保留自动删除的NSString@“test”,因此会出现错误的EXEC错误。该代码没有任何错误,只是不是一个完整的最小示例。您还应该说明是否正在使用ARC。我的第一个猜测是该按钮未正确连接到SelfViewController的实例。如果您删除了NSLog
,您能在不造成崩溃的情况下按下按钮吗?@Dondragmer:是的,没有问题。如果您包括NSLog(@“Text”)代码>-未尝试显示usernameString
-是否出现这种情况?问题出在自身。ThanksNo problem—self
表示它不直接设置变量,而是根据属性类型执行操作。由于我们使用self
将其设置为retain(非原子,这只是意味着它是线程不安全的,但速度更快),因此它被保留。希望这有意义!只是一个小的术语更正:“问题是您将usernameString分配给自动删除的字符串对象”