我有一个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中的对象?
答案 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");
}
}