【发布时间】:2009-04-29 12:23:16
【问题描述】:
我有一个问题,当我在 iPhone 上的 dealloc 中调用 NSStream 对象上的 release 时,我得到了 EX_BAD_ACCESS。
以下代码
- (void)dealloc {
DLog(@"dealloc started for: %@",self);
@synchronized(self) {
lookupCount--;
if (lookupCount==0) {
UIApplication* app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = NO;
}
}
DLog(@"inStream retain count before release: %d",[inStream retainCount]);
[inStream release];
DLog(@"outStream retain count before release: %d",[outStream retainCount]);
[outStream release];
[queryToSend release];
[resultString release];
[data release];
[super dealloc];
NSLog(@"dealloc finsihed for : %@",self);
}
与 EX_BAD_ACCESS 在 【外发】; 行。
日志输出如下
2009-04-29 13:16:28.547 App[30580:20b] -[SimpleQuery dealloc] [Line 160] dealloc started for: <SimpleQuery: 0x56e540>
2009-04-29 13:16:28.547 App[30580:20b] -[SimpleQuery dealloc] [Line 168] inStream retain count before release: 1
2009-04-29 13:16:28.548 App[30580:20b] -[SimpleQuery dealloc] [Line 170] outStream retain count before release: 1
想知道是否有人知道为什么会这样?
【问题讨论】:
-
你能发布你是如何创建你的 inStream 对象的吗?对象可能是通过其他方法自动释放的,这就是为什么当您尝试释放它时它会失败。
-
它是通过调用 getStreamsToHostNamed:port:inputStream:outputStream: 创建的,我认为它不应该返回自动释放的对象
标签: iphone objective-c memory-management