iphone app:无法从Custom Singleton检索属性

时间:2011-10-29 11:50:41

标签: iphone ios

我在iPhone应用程序中创建了以下Singleton:

#import "AppManager.h"

static AppManager *sharedAppManager = nil;

@implementation AppManager

@synthesize currentType, listOfTypes;

#pragma mark Singleton Methods
+ (id)sharedManager {
    @synchronized(self) {
        if (sharedAppManager == nil)
            sharedAppManager = [[self alloc] init];
    }
    return sharedAppManager;
 }
- (id)init {
    if (self = [super init]) {
        currentType = @"";
        listOfTypes = [NSArray arrayWithObjects:@"T1", @"T2", @"T3", nil];
    }
    return self;
}
- (void)dealloc {
    // Should never be called, but just here for clarity really.
    [currentType release];
    [listOfTypes release];
    [super dealloc];
}

@end

当我使用它时:

// TEST
AppManager *appManager = [AppManager sharedManager];
NSArray *array = appManager.listOfTypes;
NSLog(@"TYPES:%@", array);

我有一件奇怪的事情......

TYPES:<UIButtonContent: 0x7b8db10 Title = (null), Image = <UIImage: 0x7bad7f0>, Background = (null), TitleColor = UIDeviceWhiteColorSpace 1 1, ShadowColor = UIDeviceWhiteColorSpace 0 0.5>

使用currentType(NSString属性)可以正常工作,但不适用于listOfTypes(NSArray)

2 个答案:

答案 0 :(得分:3)

您没有保留数组 listOfTypes ,因此数组可能已被释放并指向一些垃圾值。使用以下命令保留数组(如果它是保留/复制的属性)。

self.listOfTypes = [NSArray arrayWithObjects:@"T1", @"T2", @"T3", nil];

您也可以简单地将保留消息发送到阵列。

listOfTypes = [[NSArray arrayWithObjects:@"T1", @"T2", @"T3", nil] retain];

或分配数组。

listOfTypes = [[NSArray alloc] initWithObjects:@"T1", @"T2", @"T3", nil];

答案 1 :(得分:1)

listOfTypes = [NSArray arrayWithObjects:@"T1", @"T2", @"T3", nil];

这一行将自动释放的数组直接分配给您的实例变量。当您访问它时,内存已被重新分配给不同的对象。

我假设您的listOfTypes是一个保留属性。分配正在使用self.listOfTypes=或在上面的代码中添加retain

您没有在其他属性中看到此内容,因为您已分配了一个未释放的静态字符串。