在使用ASIHTTPRequest异步模式之前,数据将被释放

时间:2011-09-04 09:56:28

标签: iphone objective-c asihttprequest

我在从viewDidLoad()调用的函数中以异步模式使用ASIHTTPRequest

NSURL *url = [NSURL URLWithString:@"http://somewebsite.com/data.txt"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];

这是我的requestFinished(),其中我做了一些文本替换,并使用我从网站收到的数据填充NSArray。它只是文本,每行一个数据项。 viedDidLoad()中的NSArray(和alloc / init)。

- (void)requestFinished:(ASIHTTPRequest *)request
{
   NSString *sTemp = [request responseString]; 
   sTemp = [sTemp stringByReplacingOccurrencesOfString:@"\n" withString:@","];          
   arrayTidalData = [sTemp componentsSeparatedByString:@","]; 
   NSLog(@"Loaded %d items into the array",[arrayTidalData count]);
   [tableTideTimes reloadData];
}

NSLog报告127个数据项。

现在,我使用NSArray数据来填充UITableView。 但是,在我尝试访问NSArray(arrayTidalData)时,在cellForRowAtIndexPath()中,例如通过计数,我得到以下内容:

TideTimes [14696:b303] * - [__ NSArrayM count]:发送到解除分配的实例0x4e6c6a0的消息

(我打开NSZOMBIEEnabled = YES获取此数据)

似乎NSArray在我使用之前已被解除分配。我还尝试使用requestFinish()中的数据填充NSString但得到了相同的结果。

我错过了一些非常简单的事情,还是我做了一件非常错误的事情?

(这是我第一次使用ASIHTTPRequest)

1 个答案:

答案 0 :(得分:1)

替换

arrayTidalData = [sTemp componentsSeparatedByString:@","];

arrayTidalData = [[sTemp componentsSeparatedByString:@","] retain];

这是因为componentsSeparatedByString:返回autoreleased个对象。因此,方法released结束工作后requestFinished:

不要忘记在工作结束时发布(例如,dealloc)。