NSUserDefaults发布的对象?

时间:2010-11-30 19:58:14

标签: iphone objective-c ipad

所以我在UserDefaults中保存了用户名。出于某种原因,我遇到了一些奇怪的行为。

我有一个数据控制器,可以根据用户名从服务器获取一些数据。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"NSUserDefaults dump: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

userID = [prefs stringForKey:@"username"];

这在前几次工作正常,但在我做了一些随机的东西并回去尝试重新加载视图后,它崩溃了。它说:

-[CFString retain]: message sent to deallocated instance 0x4b18ff0

这很奇怪,因为它在NSLog线上停止。有没有人见过这个或知道为什么会发生这种情况?

2 个答案:

答案 0 :(得分:6)

您是如何定义用户标识的?如果它是具有retain属性的属性,则应调用

self.userID = [prefs stringForKey:@"username"];

这样你的字符串就会自动保留。从stringForKey返回的字符串是自动释放的。

答案 1 :(得分:0)

stringForKey返回一个你没有保留的自动释放对象,它可能会在该方法完成后立即释放。

您需要手动或使用带保留设置的属性声明来保留该字符串。

然后你需要在某个时候释放它(至少在dealloc中)