English 中文(简体)
优化远程plist的加载
原标题:Optimize loading of remote plist

我已经编写了一个应用程序,可以从我的服务器上的plist加载信息(我希望这对Apple来说没问题:-)。该应用程序在WiFi上运行平稳,但在3G上使用时,加载时间有点太长。因此,我想优化我的plist的加载。

我想我可以在设备上存储一份plist的副本,只检查远程plist是否发生了更改,如果发生了,请下载它。我不确定这是否会减少数据,从而最大限度地缩短加载时间,我甚至不确定这将如何用代码编写。

有人知道我如何最大限度地减少加载时间并可能发布代码示例吗?

现在我正在使用这两行来加载plist并存储它。FETCH_URL显然是我的URL。

NSURL *url = [NSURL URLWithString:FETCH_URL];
NSMutableArray *tmpArray = [[NSMutableArray alloc] initWithContentsOfURL:url];

编辑:正如Thomas Clayson所建议的那样,我正在尝试使用NSURLConnection,但我似乎不知道如何将数据转换为NSMutableArray。

这在我的视图中DidLoad:

NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:FETCH_URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if (theConnection) {
        NSLog(@"Connection open.");
    }
    else {
        NSLog(@"Failed connecting.");
    }

然后我有这两种方法来检查是否有任何新数据,以及检查是否所有数据都已收集。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSLog(@"More data.");
    [receivedData appendData:data];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"Connection successful.");
}   
最佳回答

我理解你的意思。您将希望使用NSURLConnection,而不是initWithContentsOfURL

initWithContentsOfURL是同步的。这意味着它将在主线程上运行,从而“挂起”应用程序(这是因为UI事件必须在主线程中发生,如果进程正在发生(等待plist下载),应用程序将停止)。

无论如何,如果您使用NSURLConnection,那么您将能够异步地(在另一个线程上)执行它。这意味着你的应用程序在一段时间内可以使用,但不会立即显示plist中的数据。因此,当<code>connectionDidFinishLoading:

无论如何都要查一下。:)它非常有用

问题回答

只能通过最小化plist本身来最小化加载时间。尝试各种格式(二进制plist、xml plist)。如果您有一个选项,请尝试获取json。AFAIK拥有最佳的信息大小比。二进制plist解析速度最快,而xml plist最适合用于调试。





相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签