NSMutableArray作为全局变量导致崩溃

时间:2012-08-30 19:34:22

标签: objective-c arrays nsmutablearray

我在.h文件中有以下内容作为全局变量

NSMutableArray *garr;

以及.m文件中的以下内容

- (void)roundone {
    if (!garr) {
        garr = [[NSMutableArray alloc]init];
        for (int x = 0; x < 900; x++) {
            [garr addObject:[NSNumber numberWithInt: arc4random()%600]];        
        }
    }
}

在任何方法中调用var garr的问题然而它正确地返回nslog中的值但是当我在代码中使用garr时系统崩溃!任何想法PLZ

-(IBAction)clicked:(id)sender{ 
NSLog(@"%@",garr);
//bubbleSort(array);    // sort the array
int n = [garr count]  ;
for (int i = 0; i < n-1; i++)
    for (int j = 0; j < n-i-1; j++)
        if ([[garr objectAtIndex: j] compare:[garr objectAtIndex: j+1]] == 
            NSOrderedDescending)
            //#define SWAP(arr, x, y) 
            do {    
                id oldX = [garr objectAtIndex: (j)];    
                // NSLog(@"%d %s",oldX ,oldX);
                [garr replaceObjectAtIndex: (j) withObject: [garr objectAtIndex: (j+1)]];
                [garr replaceObjectAtIndex: (j+1) withObject: oldX];    
            } while (0);


NSString *element;
NSEnumerator *iterator = [garr objectEnumerator];
while ((element = [iterator nextObject]) != nil)
    NSLog(@"elments %@",element);

我不会在代码中使事情复杂化但是当全局var在方法内部时代码工作正常但在方法外面的garr时不起作用

1 个答案:

答案 0 :(得分:1)

你应该在标题中声明你的全局变量,而不是定义它们。标记变量extern,将定义放入.m文件,并将变量初始化为nil

部首:

extern NSMutableArray *garr;

.m文件:

NSMutableArray *garr = nil;

重建一切,应该消除崩溃。