2011-08-25 47 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];