我在我的应用中设置了推送通知.我正在尝试确定我在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中从APNS收到的设备令牌是来自沙箱还是开发环境.如果我可以区分哪个环境初始化了令牌,我将能够告诉我的服务器向哪个环境发送推送通知.
我已经尝试使用DEBUG宏来确定这一点,但我已经看到了一些奇怪的行为,并且不相信它是100%正确的.
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以aps-environment在代码中检查权利(值是开发或生产),但我不确定这是否可行.
确定您的应用是否正在与APNS沙箱或生产环境进行通信的正确方法是什么?我假设服务器首先需要知道这一点.如果假设不正确,请纠正我.
编辑:Apple关于提供商与APNS通信的文档详细说明了与沙箱进行通信和生产之间的区别.但是,文档未提供有关如何与注册令牌(来自iOS客户端应用程序)以及与服务器通信一致的信息.
我一直在测试一个iPhone视图控制器,它使用UIWebView加载外部内容,而不是项目包中的资源.另一位工程师注意到Web视图根本没有缓存,所以我进行了一些研究.一些较旧的问题表明UIWebView无法缓存外部内容.
以前关于UIWebView缓存的SO问题:
这些帖子非常混乱,但我注意到在iOS 4.0问世之前他们都被问到了.我测试了以下缓存方法,这看起来很简单.
NSURLRequest *request = [NSURLRequest requestWithURL:myUrl
cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30];
[webView loadRequest:request];
Run Code Online (Sandbox Code Playgroud)
这似乎在iOS 4.3上运行良好,但在iOS 3.0上根本不起作用.我通过将设备指向Charles代理(在iPhone上,设置 - > WiFi,手动代理)并将流量记录到我的服务器来测试.
UIWebView是否开始在iOS 4.0中观察缓存策略?任何人都可以证实这一点,还是我想象的事情?
我一直在使用图像文件进行大量的iPhone UI工作,这些图像文件在单个视图中的多个位置或整个应用程序的多个视图中使用.在某些情况下,我正在绘制新的图标,通常是通过合成2个小图像(每个小于4 KB).
我已经考虑过优化图像的加载,但我不确定最佳实践是什么.我猜想保存使用CG函数创建或更改的任何图像是值得的.对于未更改的图像,从捆绑中加载图像的开销是多少?
UIImage* image = [UIImage imageNamed:@"myImage.png"]
Run Code Online (Sandbox Code Playgroud)
考虑到移动设备的内存限制,在考虑缓存图像时哪些因素最重要?我想到了图像的大小,可以缓存的图像总数以及加载单个图像的次数.
Apple 从 iOS 5.0 开始支持磁盘缓存。我以前使用过家庭滚动解决方案,但我正在测试,NSURLCache希望最终使用它,因为我过去见过奇怪的行为。
我遇到的更令人困惑的问题之一是cachedResponseForRequest:返回过期的请求。我一直在通过将我正在使用的 iPhone 上的时钟调快来进行测试。解析标头清楚地表明设备时间早于到期日期。
我愿意接受可能有一个后台任务会定期修剪过期的请求。我已经完成了测试,我实际上等待查看请求是否“自然”过期,但事实并非如此。
苹果只是未能正确实现缓存失效吗?
我正在使用Charles代理进行测试。这是一个棘手的问题,我并不羡慕任何必须实现缓存失效的人,但 iOS 现在应该是一个成熟的 SDK。
ios ×2
iphone ×2
caching ×1
nsurlcache ×1
nsurlrequest ×1
objective-c ×1
performance ×1
uiimage ×1
uiwebview ×1