'EXC_BAD_ACCESS'尝试访问变量时?

Kri*_*oks 0 cocoa exc-bad-access objective-c

尝试访问其中设置的函数以外的函数中的变量时,出现" EXC_BAD_ACCESS "错误

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

//Retrieve Session-ID
sessionID = [self getSessionID];
Run Code Online (Sandbox Code Playgroud)

并在' searchBtnClick '中访问:

NSLog(@"Commening search (%@)",sessionID); // This causes the error
Run Code Online (Sandbox Code Playgroud)

变量本身在标题中定义:

NSString *sessionID;
Run Code Online (Sandbox Code Playgroud)

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

getSessionID返回值的部分:

NSString *pC = @"";

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

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

return pC;
Run Code Online (Sandbox Code Playgroud)

Noa*_*oon 8

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

 sessionID = [[self getSessionID] retain];
Run Code Online (Sandbox Code Playgroud)

然后,在您的课程中-dealloc,您需要平衡保留与发布:

 [sessionID release];
Run Code Online (Sandbox Code Playgroud)


smo*_*gan 6

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

如果您不熟悉Objective C和Cocoa,则应确保阅读有关内存模型的Apple文档.