在我的“用户”单例中,我有以下方法:
- (void)updateUser:(NSDictionary*)userInfo
{
//uid, fullname, email are ivars
[uid release];
uid = [[NSString alloc] initWithString:[userInfo objectForKey:@"id"]];
[fullName release];
fullName = [[NSString alloc] initWithFormat:@"%@ %@", [userInfo objectForKey:@"fname"], [userInfo objectForKey:@"lname"]];
[email release];
email = [[NSString alloc] initWithString:[userInfo objectForKey:@"email"]];
}
这是设置NSStrings的正确方法吗?我尝试使用自动释放对象,但它们似乎发布得太早。
编辑: 没关系我是傻瓜。完全忘记了NSMutableStrings
答案 0 :(得分:2)
您没有提供太多信息,但这实际上就是您创建NSString对象并将它们分配给您的单例中可能的实例变量的方式。您可能需要注意的是,在为变量分配新对象之前,您要释放旧对象。如果在发布和赋值之间访问了该变量,那么某些东西可能会非常糟糕。除非您必须在2.0之前支持Objective-C,否则我建议使用合成属性,因为它们可以安全地处理这些内存问题。
自动释放对象基本上意味着该对象稍后会自动释放。您可以在分配对象但无法自行释放对象的情况下使用自动释放,例如在这样的便利分配方法中:
+ (id)newObject
{
return [[[MyClass alloc] init] autorelease];
}
内存管理指南说,分配(或保留)对象的人也应该在不再需要访问该对象时释放它。因此,autorelease允许方法返回新创建的对象,并说它不再需要它。如果需要它留在身边,呼叫者必须保留它。如果没有,它将在调用者超出范围后自动释放。