'EXC_BAD_ACCESS'尝试访问变量时?

时间:2010-05-23 15:39:47

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

尝试访问

中设置的函数以外的函数时,出现“ EXC_BAD_ACCESS ”错误

该变量在' awakeFromNib '函数中设置:

//Retrieve Session-ID
sessionID = [self getSessionID];

并在' searchBtnClick '中访问:

NSLog(@"Commening search (%@)",sessionID); // This causes the error

变量本身在标题中定义:

NSString *sessionID;

有人可以建议可能出现的问题吗?

getSessionID返回值的部分:

NSString *pC = @"";

// Separate Session ID
pC = [initCookie substringFromIndex:10];
pC = [pC substringToIndex:32];

NSLog(@"Got session ID :  %@",pC);

return pC;

3 个答案:

答案 0 :(得分:8)

您的-getSessionID方法正在返回一个自动释放的变量 - 当您稍后再次尝试访问该指针时,该字符串已被释放,因此该引用不再有效。首次检索时,您需要在变量上调用-retain,如下所示:

 sessionID = [[self getSessionID] retain];

然后,在您的班级-dealloc中,您需要平衡保留与版本:

 [sessionID release];

答案 1 :(得分:6)

如果getSessionID遵循正常的Cocoa约定,则返回一个自动释放的对象。您需要保留它,或者只要自动释放池耗尽(可能在事件循环结束时),sessionID就会成为悬空指针。

如果您不熟悉Objective C和Cocoa,请务必阅读the Apple documentation about the memory model

答案 2 :(得分:0)

我有类似的问题,当你没有分配任何内存时它会崩溃。像这样发布它:

UIImage *lObj_image = [UIImage imageNamed: @"bluebar.png"];

.
.
.

[lObj_image release];

检入viewdidload()