我想知道我正在做什么更有效:
我带来了(非常小 - 每个4kb或更少).xml文件,其中包含车辆的GPS坐标。然后我解析它们(涉及非常轻松的解析)并将它们发送回委托。
目前,我正在使用一个计时器,每1秒调用一次:
-(void)refreshGPSData:(NSTimer *)theTimer{
GPSParser *parser = [[GPSParser alloc] initWithName:@"route"];
[parser parseRssFeed:@"http://thefeed.com/feed.xml" withDelegate:self];
[parser release];
}
我的问题是,以不同的方式执行此操作是否更有效,而不是持续分配和启动解析器?我应该只为一个解析器分配+ init,然后每1秒调用一次“parseRssFeed”。或者我应该不使用计时器,而是每次解析器完成并将数据返回给委托时调用“parseRssFeed”?什么是最佳编程实践?
如果我提供了足够的信息,请告诉我。 谢谢!
答案 0 :(得分:1)
这取决于您希望使用解析器的频率。如果您每分钟只解析一次数据,则无需在对象中存储解析器 如果您每秒解析数据10次,则必须分配一次并存储解析器。
另一张海报(由于这不是.net问题而删除了他的答案)建议我做了一点性能测试,以证明一个分配是一个非常慢的操作。
for (NSTimeInterval i = 0; i < 1000; i++) {
self.label1.text = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:i]];
}
vs
for (NSTimeInterval i = 0; i < 1000; i++) {
NSDateFormatter *localDateFormatter = [[NSDateFormatter alloc] init];
self.label2.text = [localDateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceNow:i]];
[localDateFormatter release];
}
第一个版本的结果为0.0017秒,第二个版本的结果为0.28秒。你会明白的。是的,NSDateFormatter可能是一个更复杂的对象示例之一。
如果你想经常使用像解析器或日期格式的对象,我会将它存储在某个地方。