在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。 任何解决方法? 提前谢谢。
答案 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];
}