Objective c iOS初始化静态对象';s成员失败
我有以下代码在运行时失败。我的.h文件:Objective c iOS初始化静态对象';s成员失败,objective-c,ios,ios5,Objective C,Ios,Ios5,我有以下代码在运行时失败。我的.h文件: @interface OutlineManager : NSObject { NSMutableArray* mOutlines; } @property(nonatomic,strong)NSMutableArray* Outlines; +(void)initialize; @end static OutlineManager* outlnManager; 在.m文
@interface OutlineManager : NSObject
{
NSMutableArray* mOutlines;
}
@property(nonatomic,strong)NSMutableArray* Outlines;
+(void)initialize;
@end
static OutlineManager* outlnManager;
在.m文件中:
#import "OutlineManager.h"
@implementation OutlineManager
@synthesize Outlines = mOutlines;
+(void)initialize
{
outlnManager = [[[OutlineManager superclass]alloc]init];
if(outlnManager)
{
outlnManager.Outlines = [[NSMutableArray alloc]init]; //it crashes here
}
NSLog(@"OUTLINEMANAGER INITIALIZED");
}
@end
当我运行(void)时,初始化应用程序会在我放置注释的if部分崩溃,但我不知道为什么。我不能初始化这样一个静态对象数组吗
我想这是一个非常基本的东西,但我对Obj C/iOS还很陌生,所以请不要对我持反对态度
非常感谢你的帮助
真诚地说,佐利你写道:
outlnManager = [[[OutlineManager superclass]alloc]init];
该超类意味着您在NSObject而不是OutlineManager上调用alloc。
只需将此行替换为以下内容:
outlnManager = [[OutlineManager alloc]init];
哦,您应该在.m文件中声明静态变量。OutlineManager.h:
替换
static OutlineManager* outlnManager;
与:
和外接程序OutlineManager.m:
OutlineManager* outlnManager = nil;
+(void)initialize { // you should rename it to an other name.. initialize will be called twice
outlnManager = [[OutlineManager alloc]init];
if(outlnManager) {
outlnManager.Outlines = [[NSMutableArray alloc]init];
}
NSLog(@"OUTLINEMANAGER INITIALIZED");
}
这很有效!但是当我无法将对象添加到另一个.m文件中的outlnManager.Outlines时,因为它是空的。它什么时候变为空的。ARC是否释放它?
OutlineManager* outlnManager = nil;
+(void)initialize { // you should rename it to an other name.. initialize will be called twice
outlnManager = [[OutlineManager alloc]init];
if(outlnManager) {
outlnManager.Outlines = [[NSMutableArray alloc]init];
}
NSLog(@"OUTLINEMANAGER INITIALIZED");
}