2011-08-25 51 views
0

我已经定义@property(nonatomic,retain)NSString *usrId; 那么这样分配一个值:EXC_BAD_ACESS在访问字符串

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

然后在dealloc我释放字符串usrId。此代码在viewController,我正在推动到navController,然后我弹出它。但下次我再次推这个viewControllerEXC_BAD_ACESS发生在上面的声明。

回答

1

尝试赋予你的价值

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

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

通过这样做,你这样做,你只是这样,当你在你释放的dealloc释放其分配的usrId[Screen.Info valueForKey:@"id"]值无论存储在[Screen.Info valueForKey:@"id"]也。让我知道这是否适合你。

1

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

2

从来没有释放一个对象,如果你没有分配或保留它。当你写:

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

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

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

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