在 AppDelegate 中,我有一个用户变量,以便在整个应用程序中都可以访问。 AppDelegate 代码如下:
@interface MyAppDelegate : NSObject <UIApplicationDelegate, ...> {
@private User *_appUser;
...
}
- (void)setUser:(User *)value;
- (User *)appUser;
- (void)setUser:(User *)value
{
@synchronized(self)
{
if(_appUser != value)
{
[_appUser release];
_appUser = [value retain];
[NSUserDefaultsManager SaveUser:_appUser];
}
}
- (User *)appUser
{
if(_appUser == nil)
return [NSUserDefaultsManager GetUser];
else
return _appUser;
}
第一次,当用户注册时,我通过 ViewController 设置用户
[((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) setUser:user];
关键是当我需要通过做来获得用户
User *user = [((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) appUser];
在 AppDelegate 的 appUser 方法中,_appUser ivar 是 Zombie。 有什么解决方法吗? 提前谢谢你。
最佳答案
你的 getter 方法是罪魁祸首吗?您返回的 _appUser 没有通常的保留/自动 Release模式。你能通过制作你的 getter 方法来解决问题吗:
- (User *)appUser
{
if(_appUser == nil)
return [NSUserDefaultsManager GetUser];
else
return [[_appUser retain] autorelease];
}
或者...
- (User *)appUser
{
if(_appUser == nil)
_appUser = [[NSUserDefaultsManager GetUser] retain];
return [[_appUser retain] autorelease];
}
关于iphone - AppDelegate 实例变量越来越僵尸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7711154/