gpt4 book ai didi

ios - 突然删除变量

转载 作者:行者123 更新时间:2023-11-28 22:55:32 24 4
gpt4 key购买 nike

我知道标题听起来有点奇怪,但问题也是如此。

我几乎在整个开发过程中都在模拟器上测试我的应用程序,我确实偶尔在真实设备上测试过一次以确保。但现在我即将完成一个问题。

每当我执行登录时,我的整个应用程序都会崩溃,提示用户名和密码变量已被释放......

这是我的申请流程:

打开应用程序时,它会检查用户名和密码是否已保存或备注

- (void)checkIfPreviouslyLoggedIn:(BOOL)didLogin andLogin:(BOOL)doLogin {
// some logic to get it out of the keychain
NSLog(@"checkIfPreviouslyLggedIn: ACCOUNT %@ / %@", tmpUsername, tmpPassword);

// RETURN: checkIfPreviouslyLggedIn: ACCOUNT /
}

之前什么都没有保存,没什么大不了的,用户只需输入帐号并点击登录

- (void)loginWithUsername:(NSString *)username andPassword:(NSString *)password {
NSLog(@"loginWithUsername: ACCOUNT %@ / %@", username, password);
// RETURN: loginWithUsername: ACCOUNT testUser / password

// save it for later use
_username = username;
_password = password;

NSLog(@"loginWithUsername: ACCOUNT %@ / %@", _username, _password);
// RETURN: loginWithUsername: ACCOUNT testUser / password

// Attach a notification handler
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginCheck:) name:@"LoginCheck" object:nil];

// call the web API
[self doRequestFromLocation:@"/groups" withPostType:@"GET" andData:nil whichTriggersNotification:@"LoginCheck"];
}

太棒了,用户名和密码都被很好地记录下来了,到目前为止还不错,doRequestFromLocation 基本上是一个队列类型的东西,我可以发送尽可能多的请求,它会一个一个地处理它们

- (void)doRequestFromLocation:(NSString *)location withPostType:(NSString *)type andData:(NSData *)data whichTriggersNotification:(NSString *)notification {
NSLog(@"doRequestFromLocation: ACCOUNT %@ / %@", _username, _password);
// RETURN: doRequestFromLocation: ACCOUNT testUser / password
}

然后它转到 doRequest 方法,该方法执行实际的数据请求,再次,我在那里记录我的用户名,它返回正确的用户名。

NSLog(@"doRequest: ACCOUNT %@ / %@", _username, _password);

在此之后一切都变得非常糟糕,当请求完成时,调用 loginCheck()

- (void)loginCheck:(NSNotification *)notification {
NSLog(@"loginCheck: ACCOUNT %@ / %@", _username, _password);
}

在这里我的 _username 和 _password 被释放,甚至在实际调用之前我检查了用户名和密码,它们仍然没问题。

所以不知何故(神奇地)这两个变量无缘无故地被释放了。请注意,_username 和 _password 仅在 loginWithUsername 中设置,它们不会在我的应用程序中的任何位置更改。

2012-06-04 13:33:28.001 coop[5060:707] * -[CFString respondsToSelector:]: message sent to deallocated instance 0x1099fc40 2012-06-04 13:33:28.648 coop[5060:707] * -[CFString _cfTypeID]: message sent to deallocated instance 0x1099fc40

可能是什么原因造成的,我添加了多个断点,结果发现它们在调用和 loginCheck() 之间的某处消失了。

最佳答案

问题出在这里:

 // save it for later use
_username = username;
_password = password;

您的变量 _username_password 未保留,这就是它们被自动释放的原因。

在非 ARC 情况下,将它们声明为 @property(retain),对于 ARC,@property(strong) 使用:

self._username = username;
self._password = password;

现在您拥有内存的所有权,现在您必须在完成后释放它。

关于ios - 突然删除变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10876691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com