我已经设置了一个Singleton(StackOverflow提供了很多帮助) 但是当我尝试修改/访问数组" listOfHeadings"时,似乎没有任何变化。 我没有收到编译器或运行时的错误或警告。
我在GlobalData.h中得到了这个:
#import <Foundation/Foundation.h>
@interface GlobalData : NSObject {
NSMutableArray *listOfHeadings;
}
@property(nonatomic,retain)NSMutableArray *listOfHeadings;
+(GlobalData*)getInstance;
@end
这是我的GlobalData.m:
#import "GlobalData.h"
@implementation GlobalData
@synthesize listOfHeadings;
static GlobalData *instance;
+(GlobalData *)getInstance{
@synchronized(self){
if(!instance){
instance= [[GlobalData alloc] init];
instance.listOfHeadings=[[NSMutableArray alloc]init]; //EDIT: This line added to resolve problem
}
}
return instance;
}
@end
我在AppDelegate.m中访问Singleton:
#import "GlobalData.h"
...inside didFinishLaunchingWithOptions...
GlobalData *globDat=[GlobalData getInstance];
[globDat.listOfHeadings addObject:@"Message Settings"];
NSLog(@"appdel m array test %i",[globDat.listOfHeadings count]); // prints 0!
很明显我做错了什么 - 有些帮助可以指出我的错误吗? 感谢。
答案 0 :(得分:1)
listOfHeadings是否有效且已实例化?
(注意:你可以在一个没有Obj-C错误的nil对象上调用方法!)
答案 1 :(得分:1)
您需要具备以下条件:
- (id)init {
if ( (self = [super init]) ) {
self.listOfHeadings = [NSMutableArray array];
}
return self;
}
- (void)dealloc {
[listOfHeadings release];
[super dealloc];
}
创建属性只会使listOfHeadings数组可用于其他类,并确保它不会被删除。您仍然需要创建对象,这在init方法中完成。由于财产被保留,你需要释放它(注意 - 一次不需要自己)以避免泄漏。