最近在一个iPad项目上要做一个BeginnerGuide,我的设计是将其做在help里,在第一次运行程序时显示此help,否则在需要了解帮助信息时,可以点击help按钮打开此BeginnerGuide。
我的结构是一个基于SplitViewController的Master-Detail结构,在第一次运行时,在Master的ViewWillAppear中通过performSegueWithIdentifier弹出此help窗口,其它情况下通过在点击Master中的help按钮弹出。之所以在ViewWillAppear中弹出而不是ViewDidAppear,是由于不想在显示BeginnerGuide之前,让用户看到主界面,那样就不叫BeginnerGuide了。
这里的问题是,在ViewWillAppear中弹出的窗口初始时总是Portrait模式,而不管设备所处模式是什么。但是打开之后,旋转设备,窗口则可以根据实际的模式调整过来。如果在父窗口的ViewWillAppear或新弹出的ViewController中的ViewDidLoad中运行如下代码:
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) { //landscape view code NSLog(@"Landscape"); } else { //portrait view code NSLog(@"Portrait"); } UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) { // portrait NSLog(@"Portrait"); } else { // landscape NSLog(@"Landscape"); } if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) { //landscape view code NSLog(@"Landscape"); } else { //portrait view code NSLog(@"Portrait"); }
当设备为Landscape模式时,实际输出为:
Portrait Portrait Landscape
也就是视图所处模式与设备是不同的。
遍寻Baidu、Google、StackOverFlow,唯一的收获是,在ViewWillAppear中,无法知道正确的Orientation信息。不过幸运的是,我最后找到了这篇文章,文中说,设备的消息已经传到了程序,刚才的例子也可以说明这点,由于Rotate消息在ViewWillAppear之前就已经排在消息队列中,这个队列是用于处理所有启动过程(Startup process)的,我们的程序只是晚了一点点,当我们的ViewController显示的时候,Rotate消息已经处理结束了。
其实很简单,我们无法将我们的显示提前到Startup Process中,但是可以延后,等到Startup Process处理完成,比如增加一个timer延时,或者更简单的方案--使用Block,代码如下:
- (void)viewWillAppear: (BOOL)animated { [super viewWillAppear:animated]; if (freshInstall) { dispatch_async(dispatch_get_main_queue(),^{ [self performSegueWithIdentifier: @"firstRun" sender: self]; }); } }
据这篇Twitter说,这个问题已经在iOS6上解决了。
Memcached是一个高发性能的分布式对象缓存系统。目前全世界不少人使用这个缓存项目来构建自己
大负载的网站,来分担数据库的压力,通过在内在里维护一个统一的巨大的的hash表,它能够用来
存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等,简单的说就是将数据调用
到内存中,然后从内在中读取,从而大大提高读取速度。
memcache是一个高效的分布式的内在对象缓存系统,她可以支持把各种php的数据(array对象、基本数据
类型)放入到它管理的内在中.
Memcached最佳实践:将从数据库查询的数据放入Memcached
使用方法:
一、telnet------>>>memchached缓存系统;
crud
二、php程序(memcache扩展、memcached扩展、使用socket访问)----->>>memcached缓存系统;
使用memcache扩展(一堆函数)来操作memcached操作系统
1.在php.ini中配置extension
放入到php/ext/目录
2.打开extension
这里启用memcache的扩展
extension=php_memcache.dll
3.编程测试
memcache除了资源类型外的其它类型都可以储存;
$mem = new Memcache();
//$mem->connect("localhost","11211");//立即向localhost的11211端口发出请求;
//上面链接不写,可以创建下面多个memcached服务链接;
$mem->addserver("192.168.1.200","11211");
$mem->addserver("192.168.1.201","11211");
$mem->addserver("192.168.1.202","11211");
//这里使用负载均衡算法来选一个memcached使用;
$mem->add("name","jmb",1,100);
使用socket套接字符串操作memcached缓存系统;(memcached-client.php)
浅谈memcached机制:
1.是c/s结构的,使用简单文本通讯;
2.基于libevent事件处理;
3.是内存缓存;
4.基于客户端的分布式;
Memcached的细节:
1.生命周期,是在add数据的时候指定的;
2.如何配置,将session数据自动保存到memcached服务器中;
步骤:
1.在php.ini文件中
把session数据放入memcache
session save_hander = memcache
这里指定放到哪个memcached服务器
session save_path = "tcp//127.0.0.1:11211"
小结:我们只需要在php.ini中作一个配置,然后再使用session时候,还是老规矩,只是这个时候,
我们的session数据,已经放到memcached中
如何使用memcached的因素:
1.如果是一个小网站,pv值不大,就不考虑使用memcached
2.变化频繁,查询频繁,但是不一定写入数据库(适合memcached)(用户在线状态)
3.变化频繁,一变化就要入库(比如股票,金融)不适合memcached
4.变化不频繁,查询频繁,不管入不入库,都比较适合memcache,(新浪的新闻频道)
菜鸟心得,高手路过。。。。。
在方案公司开发环境一般极其复杂, 有一种情况如果在板子inand没有驱动起来的时候,没有分区,没有根文件系统。快被淘汰掉的nandflash板子上压根没焊,而且手机的板子中根本没有rj45接口,所以想要做nfs那是天方夜谈的事情。想要安安心心的进入shell界面谈何容易。除非有别的方法启动板子,但是会让本就复杂的情况变得更复杂。至于其他理由及需求我这里不在赘述。
因为当网络中这方面资料讲的虽然比较全面,而且提纲挈领,但是方法繁多,结构松散,不知从何入手。几经折腾后写下这篇心得,不管你多菜,跟随五个步骤一步一步做,问题应该能够得到解决。(initramfs.cpio我认为是很好的一种方法,使用简单,内核自带,不需要打任何补丁,在逻辑中内核跟文件系统看起来浑然一体,移植性更高,不需要各种复杂的uboot操作,使用这种方法足以对应各种发杂的开发环境)
注:我这里用到的环境是s3c6410 linux2.6.32.2
1)找个简单一下的跟文件系统,需要一个busybox用来做一些最简单的操作
注:这里我放在了内核根目录下面,在逻辑上来看内核跟文件系统形成了一部分东西
2)make menuconfig中勾选
General setup --->
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
然后这里填入具体根目录的路径(内核目录下的minirootfs)
3)make重新编译内核,一般情况不需要clean
编译过程中会发现usr/initramfs_data.cpio被更新了
来到usr目下发现确实是有这么一个7.8M的东东,不管,继续去arch/arm/boot/下查看
发现zImage变成了7M的大家伙,做到这步,说明你已经成功一半了
5)OK让我们放到板子上跑一下
想办法把把zImage拷贝到内寸中,不管用什么办法,拷贝到启动地址即可,我这里使用的是TFTP(s3c6410的启动地址是0x50008000这里就不在赘述了)
设置bootargs为"console=ttySAC0,115200 init=/linuxrc ==>ttySAC0"即不指定根"root=xxx"
bootm启动
如果你进shell了,说明你已经成功了,在我博客blog.csdn.net/dragon101788上顶一下帖子说明对你有所帮助。如果没有成功,那么加我QQ:45797408,一起讨论
如果你想更深入的了解请点击精通initramfs构建step by step
可能会出现问题:
找不到控制台,串口连不上
:来到initramfs根目录中的dev下创建console与null
重新make以下步骤,问题得以解决