我已经构建了一个iPhone网络应用程序并完成了所有步骤,使其看起来像一个本机应用程序:应用程序图标,防止滚动,防止选择,使用基于触摸的js方法等.但是,我有一个艰难的时间随着闪屏.
我尝试过使用清单文件缓存的320x460 PNG和JPEG.启动图像确实出现,但仅在应用程序启动白屏后几秒钟后出现.因此,在应用程序完成启动之前,启动画面实际上只显示了几分之一秒.
我无法弄清楚为什么它没有立即加载飞溅.我知道它是由清单缓存的,因为它加载没有互联网连接.我之前读过,直到DOM准备好才会显示启动,所以我猜这是问题所在,但我不知道如何修复它.
iphone splash-screen iphone-web-app iphone-standalone-web-app
背景:我目前正在尝试通过支持处理某些结构来“扩展”标准C格式,类似于Objective-C如何扩展C格式以允许对带有“%@”序列的NSString的支持。
我苦苦挣扎的一个问题是vsprintf在OS X和Linux上的行为似乎有所不同(我已经在Ubuntu 10.10和12.04上进行了测试)。在OS X上,它表现的是我的预期,在调用vsprintf之后,调用va_arg返回ms指针(就像vsprintf函数调用va_arg来获得5一样)。但是,在Linux上,va_list不会从vsprintf更改,并且调用va_arg返回5。
我真的很想找出一种实现此功能的方法,以使其在各个平台之间始终如一地运行。假设您可以期望vsprintf持续更改va_list中的指针是错误的,以便下次调用va_arg时,它返回下一个尚未使用的参数?
我已尽可能简化了代码以演示该问题。在OS X上,此代码输出从malloc返回的指针的正确地址。在Linux上,foo中的ms的值变为5,因此它将输出5。
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
static void foo(void *, ...);
typedef struct {
char *value;
} mystruct;
int main(int argc, char *argv[]) {
mystruct *ms = malloc(sizeof(mystruct));
foo(NULL, "%d %@", 5, ms);
}
void foo(void *dummy, ...) {
va_list args;
va_start(args, dummy);
char buffer[512];
int buffer_ptr = 0;
int i = 0;
char *format = va_arg(args, char *);
buffer[0] = '\0';
for (i = 0; i < strlen(format); i++) …Run Code Online (Sandbox Code Playgroud)