1
在AppDelegate中我有一个用户变量,以便在整个应用程序中都可以访问。 THA的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;
}
第一次,当用户寄存器,I设置经由的ViewController用户通过执行
[((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) setUser:user];
事情是当我需要通过做
User *user = [((MyAppDelegate *)[[UIApplication sharedApplication] delegate]) appUser];
在AppDelegate的AppUser方法中,_appUser ivar是僵尸。 任何解决方法? 预先感谢您。
这似乎并没有帮助的。 _appUser在这种方法中仍然是僵尸。我在应用程序didFinishLaunchingWithOptions中添加了_appUser = [[[User alloc] init] retain],但无济于事。 – ozzotto
您是否直接在应用程序委托的其他位置访问_appUser ivar,而不是通过访问器?此外,我不知道什么样的对象(和什么保留计数),[NSUserDefaultsManager GetUser]方法正在返回... – FluffulousChimp
GetUser方法使用NSKeyedUnarchiver unarchiveObjectWithData,所以我想返回一个自动释放对象。另外,在setter方法中,'value'是一个自动释放对象。 – ozzotto