我认为我没有完成有关记忆和这些内容的所有了解,但这是我的问题:

我在将要按下的视图上有一个可变定义的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 ISEEQUALTOSTRING:]:发送给Deallocated实例的消息

有帮助吗?

解决方案

看来包含在 nextView.idActual 当您更改值时,已经发布。如果您可以发布更多相关代码,那将有所帮助。

我猜 idActual 被宣布为 @property(nonatomic,retain). 。当您尝试将新值设置为 idActual, ,该属性的设置器方法被调用(可能会自动生成设置器)。 Setter方法要做的第一件事是试图比较旧值和新值 - 然后它崩溃。

当该设置器方法尝试将新值与旧值进行比较时,它会遇到麻烦,因为旧值已经被交易。

你在打电话 [nextView.idActual release] 在分配这些新值之前?如果是,请评论该行,看看是否可以解决您的问题。自动生成的设置器方法将为您发布旧值。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top