从C数组向NSmutableArray添加对象

时间:2014-09-12 02:31:41

标签: objective-c macos cocoa nsarray

我有一个NSmutable数组,我在C数组中添加了一些字符串。通过使用此方法

if (!self.arrayOfVariableNames) {
        self.arrayOfVariableNames = [[NSMutableArray alloc] init];
        for (int i = 0; i< cols; i++) {
            [self.arrayOfVariableNames addObject:[NSString stringWithCString:cArrayOfVariableNames[i] encoding:NSUTF8StringEncoding ]];
        }
    }
    else{
        [self.arrayOfVariableNames removeAllObjects];
        for (int i = 0; i< cols; i++) {
        [self.arrayOfVariableNames addObject:[NSString stringWithCString:cArrayOfVariableNames[i] encoding:NSUTF8StringEncoding ]];
        }
    }   

当C数组从内存中取出时,此方法是否确保不会释放NSmutableArray中的对象?

3 个答案:

答案 0 :(得分:1)

如果此数组arrayOfVariableNames变为空,那么问题在于数组的初始化。请尝试使用延迟加载:

- (NSArray*)arrayOfVariableNames {
    if (!_arrayOfVariableNames) {
        _arrayOfVariableNames = [[NSMutableArray alloc] init];  //initialise the array if needed
    }
    return _arrayOfVariableNames;  //else return the already initialized array
}

请在代码中注释掉这一行:self.arrayOfVariableNames = [[NSMutableArray alloc] init];

<强> **** **** EDIT
请在https://docs.google.com/file/d/0BybTW7Dwp2_vdHhQN1p1UzExdTA/edit?pli=1中找到更新代码。看看吧。

答案 1 :(得分:0)

是。 NSArray保留了任何内容。 但是你应该停止链接你的NSString创建,而是在将字符串添加到数组之前创建一个字符串。然后检查是否为零。 如果它不是nil,只将它添加到数组中。 做防守代码。

答案 2 :(得分:0)

arrayOfVariableNames在取消分配C数组时不会改变。

确保您的arrayOfVariableNames变量为strong

@property (nonatomic, strong) NSMutableArray *arrayOfVariableNames;

    if (!self.arrayOfVariableNames) 
    {
      self.arrayOfVariableNames = [[NSMutableArray alloc] init];
    }
    else
    {
      [self.arrayOfVariableNames removeAllObjects];
    }

   for (int i = 0; i< cols; i++) 
   {
       NSString *tempString = [NSString stringWithCString:cArrayOfVariableNames[i] encoding:NSUTF8StringEncoding];

       if([tempString length] > 0)
       {
         [self.arrayOfVariableNames addObject:tempString];
       }
       else
       {
         NSLog(@"string is empty");
       }
   }