所以我在UserDefaults中保存了用户名。出于某种原因,我遇到了一些奇怪的行为。
我有一个数据控制器,可以根据用户名从服务器获取一些数据。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
userID = [prefs stringForKey:@"username"];
这在前几次工作正常,但在我做了一些随机的东西并回去尝试重新加载视图后,它崩溃了。它说:
-[CFString retain]: message sent to deallocated instance 0x4b18ff0
这很奇怪,因为它在NSLog线上停止。有没有人见过这个或知道为什么会发生这种情况?
答案 0 :(得分:6)
您是如何定义用户标识的?如果它是具有retain属性的属性,则应调用
self.userID = [prefs stringForKey:@"username"];
这样你的字符串就会自动保留。从stringForKey返回的字符串是自动释放的。
答案 1 :(得分:0)
stringForKey返回一个你没有保留的自动释放对象,它可能会在该方法完成后立即释放。
您需要手动或使用带保留设置的属性声明来保留该字符串。
然后你需要在某个时候释放它(至少在dealloc中)