访问字符串时EXC_BAD_ACCESS

时间:2011-08-25 13:33:42

标签: iphone objective-c exc-bad-access

我定义了@property(nonatomic,retain)NSString *usrId; 然后赋予这样的值:

usrId=[Screen.Info valueForKey:@"id"];

然后在dealloc我发布字符串usrId。这段代码位于viewController,我正在推送navController,然后我将其弹出。但是下次我再次推送viewController时,EXC_BAD_ACESS会在上述声明中发生。

3 个答案:

答案 0 :(得分:2)

如果您未分配或保留对象,则

从不释放对象。当你写:

NSString *usrId = [Screen.Info valueForKey:@"id"];

你只是给它一个参考,既不分配也不保留它。所以你可以使用以下之一,然后在dealloc中释放,或者你根本不应该释放它。

NSString *usrId = [[NSString alloc] initWithString:[Screen.Info valueForKey:@"id"]];

NSString *usrId =[[Screen.Info valueForKey:@"id"] retain];

答案 1 :(得分:1)

使用usrId直接使用iVar而不是属性,因此未正确使用它。您需要使用dot syntax,因此请将其更改为self.usrId = [Screen.Info valueForKey:@"id"];以使用该属性。

答案 2 :(得分:1)

尝试将您的值指定为

self.usrId = [Screen.Info valueForKey:@"id"];

usrId = [[Screen.Info valueForKey:@"id"] retain];

通过执行此操作,您只需将usrId的值分配给[Screen.Info valueForKey:@"id"],这样当您在dealloc中释放它时,您也会释放[Screen.Info valueForKey:@"id"]中存储的内容。如果这对您有用,请告诉我。