0

在 .h 文件中:

double var1;
NSString *Items[90];

在 .m 文件中:

var1 = 1000;
NSString  *j = [NSString stringWithFormat:@"%g", var1 ];
Items[42] = [@" Per each " stringByAppendingString: j ];

请参阅上面的代码,问题是通过运行的应用程序我有一个需要此 Items[42] 值的过程,但是该值不再存在(我没有删除它)但单元格完全为空,没有 null 或空格,就像释放了单元格值一样。

另一方面,如果我只是在 Items[42] 中放置一些没有附加变量的字符串(如 var1)(即 Items[42] = @"hello there"; ),那么一切正常,并且 Items[42] 的值为被保存。

知道为什么单元格在呈现可变内容(如 var1 )时会丢失内容吗?

TIA

4

5 回答 5

1

您需要更加小心NSString对象的生命周期。这些[NSString stringWithBlah]方法返回autoreleased 个实例(所以指针会晃动——我很惊讶你没有崩溃)。

您需要改为使用[[NSString alloc] initWithBlah](或任何地方)release中的实例。dealloc

于 2012-05-30T14:44:59.037 回答
1

临时字符串的引用计数器为零。随时都会被摧毁。有三个选项可以解决这个问题:

  1. Items[42] = [[@" Per each " stringByAppendingString: var1 ] retain];
    在非 ARC 环境中,记得[Items[42] release]稍后再调用。
  2. 将项目声明为NSMutableArray*NSArray*,即NSMutableArray* 项目。它将自动管理其对象的引用计数
  3. 转换程序以使用 ARC

For global (static) constant strings, they have an infinite reference counter, and would never be destroyed.

于 2012-05-30T14:49:00.807 回答
0

你的意思是(最后一行)

Items[42] = [@" Per each " stringByAppendingString: j ];

代替:

Items[42] = [@" Per each " stringByAppendingString: var1 ];
于 2012-05-30T14:46:08.250 回答
0

你试过这个吗?

      Items[42] = [@" Per each " stringByAppendingString: j ];
于 2012-05-30T14:46:08.267 回答
0

不要在头文件中声明裸变量。你会得到意想不到的结果。

在.h中:

extern double var1;
extern NSString *Items[90];

以 .m 为单位:

double var1;
NSString *Items[90];
于 2012-05-30T14:48:06.627 回答