获得僵尸的AppDelegate实例变量

时间:2011-10-10 10:00:11

标签: iphone objective-c ios xcode

在AppDelegate中,我有一个用户变量,以便在整个应用程序中可以访问。 Tha 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。 任何解决方法? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

你的getter方法是罪魁祸首吗?您将返回没有通常的retain / autorelease模式的_appUser。你可以通过制作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];
 }