使NSArray全球化

时间:2011-05-27 10:17:40

标签: objective-c nsarray global

我有NSarray,我想从我的所有方法访问,(我想要它全局),我将在我的.m文件中定义的一个方法中填充此数组(仅一次)。  我的问题是......是否真的可以在.h中声明NSArray并将其定位在其他地方,或者只需在声明(初始化)时定义它。

我的当前代码

.h文件

@interface slots2ViewController : UIViewController {
NSArray* paylinesArr;
}

我从ViewDidLoad调用follwing方法

.m文件

-(void)init_payline_arr
  {
NSString* filePath = @"/Users/net4uonline/Desktop/slots2/paylines.txt";//filepath...
NSString *fileContents = [NSString stringWithContentsOfFile: filePath];
paylinesArr = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    }

我无法使用其他方法中的paylinesArr数组,如果调用后续函数,应用程序崩溃

-(IBAction)ShowVal

 {
  NSLog(@"number of elements! %@",[paylinesArr count]);
  }

或者 我应该使用NSMutabbleArray吗?

如果你想看到我在使用调试工具时上传了我的桌面视频! the link to video

在这个视频中我按下调试器的录音按钮(我已启用ns僵尸和保留计数),应用程序启动,我按下旋转按钮,显然它崩溃了...然后我告诉你的代码

   paylinesArr = [[fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] retain]; 

保留paylineArr

1 个答案:

答案 0 :(得分:3)

NSMutableArray对你没有帮助!您的错误的原因是您的paylinesArr变量是自动释放变量,因此可能在调用ShowVal之前已取消分配。尽量保留它

-(void)init_payline_arr {
    ...
    paylinesArr = [[fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] retain];
    ...
}

这应该有效。但是不要忘记用viewDidUnload方法发布它:

- (void)viewDidUnload {
    [super viewDidUnload];
    ...
    [paylinesArr release];
}