iphone - AppDelegate 实例变量越来越僵尸

标签 iphone objective-c ios xcode

在 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/

相关文章:

ios - ARKit:如何将一个导入的 3D 模型置于另一个之上?

ios - 捆绑标识符和产品名称中区分大小写

objective-c - @property Objective-C

ios - NSSortDescriptor 排序正值

ios - iOS 16 后的连续数

ios - 如何在 SwiftUI 和 iOS 14 中向领先的导航栏项添加角标(Badge)?

ios - App Store由于UIRequiredDeviceCapabilities键而拒绝了App

iphone - 如何使用比较:options对NSArray进行排序

ios - 如何在导航 Controller 中同时进行模式转换和弹出到根?

iphone - 如果我弱链接应用程序中的所有框架会怎样?