0

我想我还没有完全理解记忆和那些东西,但这是我的问题:

我在将被推送的视图上定义了 idActual 变量(在其标题中定义的变量),我可以读取(NSLog(idActual))并将其设置为 nil 没有问题。但是当我改变它的值时,我得到一个 CFString 错误,这应该是由于内存管理不善,我试过这个:

我可以这样做:nextView.idActual = nil;

我不能这样做:

a) nextView.idActual = @"1";

b) NSString *str = [NSString stringWithFormat:@"1"]; 
   nextView.idActual =  str;

c) NSString *str = [[NSString alloc] initWithFormat:@"1"];
   nextView.idActual = str;
   [str release];

a、b 和 c 总是给我 CFString 错误:*** -[CFString isEqualToString:]: message sent to deallocated instance

4

1 回答 1

0

当你去更改值时,其中包含的CFString(NSString)似乎nextView.idActual已经释放了。如果您可以发布更多相关代码,那将有所帮助。

我猜这idActual被声明为@property(nonatomic,retain). 当您尝试将新值idActual设置为 时,将调用该属性的 setter 方法(可能自动生成了 setter)。setter 方法所做的第一件事是尝试比较旧值和新值——然后它就崩溃了。

当该 setter 方法尝试将新值与旧值进行比较时,它会遇到麻烦,因为旧值已被释放。

您是否在分配这些新值之前打电话[nextView.idActual release]?如果是,请注释掉该行,看看是否能解决您的问题。自动生成的 setter 方法将为您释放旧值。

于 2011-09-05T18:40:24.087 回答