Iphone 数组(c样式)单元格内容丢失';发出变量内容时的s值

Iphone 数组(c样式)单元格内容丢失';发出变量内容时的s值,iphone,objective-c,xcode,Iphone,Objective C,Xcode,在.h文件中: double var1; NSString *Items[90]; 在.m文件中: var1 = 1000; NSString *j = [NSString stringWithFormat:@"%g", var1 ]; Items[42] = [@" Per each " stringByAppendingString: j ]; 见上面的代码,问题是通过运行的应用程序,我有一个程序需要这个 项目[42]值,但是该值不再存在(我没有删除它),但是 单元格完全为空,没有nu

在.h文件中:

double var1;
NSString *Items[90];
在.m文件中:

var1 = 1000;
NSString  *j = [NSString stringWithFormat:@"%g", var1 ];
Items[42] = [@" Per each " stringByAppendingString: j ];
见上面的代码,问题是通过运行的应用程序,我有一个程序需要这个 项目[42]值,但是该值不再存在(我没有删除它),但是 单元格完全为空,没有null或空格,就像释放了单元格值一样

另一方面,如果我只是在Items[42]中放置一些没有附加变量的字符串(比如var1)(即Items[42]=@“hello here”;) 然后一切正常,并保留项目[42]的值

你知道为什么当单元格显示可变内容(如var1)时,单元格会丢失内容吗


TIA

您需要更加小心
NSString
对象的生命周期。
[NSString stringWithBlah]
方法返回
autorelease
d个实例(因此指针将移动-我很惊讶您没有崩溃)

您需要改用
[[NSString alloc]initWithBlah]
释放
中的实例(或任何地方)。

您的意思是(最后一行)

而不是:

Items[42] = [@" Per each " stringByAppendingString: var1 ];
你试过这个吗

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

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

在h中:

extern double var1;
extern NSString *Items[90];
In.m:

double var1;
NSString *Items[90];

临时字符串的引用计数器为零。它随时都会被摧毁。解决此问题有三种选择:

  • Items[42]=[[@“Per-each”stringByAppendingString:var1]retain]
    在非ARC环境中,记得稍后调用
    [Items[42]release]
  • 将项目声明为
    NSMutableArray*
    NSArray*
    ,即
    NSMutableArray*
    项目。它将自动管理其 物体
  • 将程序转换为使用ARC

  • 对于全局(静态)常量字符串,它们有一个无限的引用计数器,永远不会被销毁。

    是否使用ARC?如果没有,那么它确实会被发布(通过
    NSAutoreleasePool
    )。我是这么做的,这就是我的意思。我在上面修复了它。我改为:
    code
    NSString*jj=[[nsstringstringwithformat:@“%d”,10]retain];Item1040[42]=[[@“每个”字符串通过附加字符串:jj]retain];但结果还是一样,它失去了它。也许我应该补充一点,每次我需要重新计算Items数组的内容时,我调用这个基于上述行的重新计算过程。即使在添加retain之后,它也会丢失Grrr的值。我不明白为什么显式的
    retain
    不起作用。但是,如果ARC不是一个选项,那么在ObjC开发中使用NS容器比使用C样式数组更可取,后者会自动保留对象;例如,已经内置了alloc?@StkStocki否,它是一个方便的构造函数,返回一个
    autorelease
    d对象。
    double var1;
    NSString *Items[90];